作用域、延迟加载、数据装配与包扫描的方式创建bean

文章目录

      • 一、作用域
      • 二、延迟加载
      • 三、类型装配
      • 四、包扫描的方式创建bean

一、作用域

  • 容器内部默认使用的是单例模式
    • 两种模式
      • 单例模式
          <bean id ="SomeService" class="org.example.SomeService" scope="singleton" ></bean> 
          # 备注
            # scope= "singleton" 单例模式,默认
            # scope= "prototype" 单例模式,默认
        
      • 多例模式
        <bean id ="SomeService" class="org.example.SomeService" scope="prototype" ></bean> 
        

二、延迟加载

    <bean id ="SomeService" class="org.example.SomeService" scope="prototype" lazy-init="true"></bean>
    # 备注
      # lazy-init="true" 什么时候用对象,什么时候创建对象

三、类型装配

  • 值类型装配
    • application.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans
                                       http://www.springframework.org/schema/beans/spring-beans.xsd">
              <bean id ="SomeService" class="org.example.SomeService" scope="prototype" lazy-init="true">
                 
                   <constructor-arg name="name" value="xiaoming"></constructor-arg>
          
              </bean>
      
      
``` - 接口类 ``` package org.example;
    import java.util.List;
    
    public interface ISomeService {
        void doSome(); 
    }

  ```
  • 实现类
      package org.example;
    
      import java.util.List;
      
      public class SomeService implements ISomeService{
         
          private String name;
          
          public SomeService (String name)
          {
              this.name = name;
          }
          @Override
          public void doSome() {
              System.out.println("SomeService ----name值:"+name);
          }
      
        
      }
    
    
  • main
      ApplicationContext context =  new ClassPathXmlApplicationContext("applicationContext.xml");
      ISomeService iSomeService =  context.getBean("SomeService",ISomeService.class); 
      iSomeService.doSome();
    
  • 引用类型装配
    • application.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.springframework.org/schema/beans
                                     http://www.springframework.org/schema/beans/spring-beans.xsd">
            <bean id ="SomeService" class="org.example.SomeService" scope="prototype" lazy-init="true">
                <property name="lists">
                    <list>
                        <value>1</value>
                        <value>2</value>
                        <value>3</value>
                        <value>4</value>
                    </list>
                </property> 
        
            </bean>
        
        </beans>
      
    • 接口类
        package org.example;
      
        import java.util.List;
        
        public interface ISomeService { 
            List<String> getList();
        }
      
      
    • 实现类
      package org.example;
      
        import java.util.List;
        
        public class SomeService implements ISomeService{
            private List<String> lists; 
            public void setLists(List<String> lists) {
                this.lists = lists;
            }
         
        
            @Override
            public List<String> getList() {
                return lists;
            }
        } 
      
    • main
        package org.example;
      
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        
        public class Main {
            /**
             * main
             * @param args
             */
            public static void main(String[] args) {
                ApplicationContext context =  new ClassPathXmlApplicationContext("applicationContext.xml");
                ISomeService iSomeService =  context.getBean("SomeService",ISomeService.class);
                System.out.println(iSomeService.getList()); 
            }
        }
      

四、包扫描的方式创建bean

  • applicationContextScanning.xml
    <?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd">
       <context:component-scan base-package="com.scanningPackage"/>
   </beans>
  • 接口类
         package com.scanningPackage;
    
         public interface ISomeService {
             void doSome();
         }
    
    
  • 实现类
         package com.scanningPackage;
    
         import org.springframework.stereotype.Service;
         
         @Service
         public class SomeService implements ISomeService{
             @Override
             public void doSome() {
                 System.out.println("SomeService--doSome");
             }
         }
    
    
    • 注解注入
      • @Repository
        • 主要标记在数据访问层对应的实现类
      • @Service
        • 主要标记在业务逻辑层对应的实现类
      • @Controller
        • 主要标记在控制层对应的实现类
      • @Component
        • 不清楚该层数据哪一类
      • @Autowired [spring 框架提供的]
        • 使用该注解完成依赖注入
      • @Resource [java 提供]
        • 使用该注解完成依赖注入
  • main
    package com.scanningPackage;
    
     import org.springframework.context.ApplicationContext;
     import org.springframework.context.support.ClassPathXmlApplicationContext;
     
     public class Test {
         private static ISomeService iSomeService;
         public static void main(String[] agrs) {
             ApplicationContext context =  new ClassPathXmlApplicationContext("applicationContextScanning.xml");
             iSomeService = context.getBean("someService",ISomeService.class);
             iSomeService.doSome();
         }
     }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/591787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode_47.全排列 II

47. 全排列 II 题目描述&#xff1a;给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] …

Server 2022 IIS10 PHP 7.2.33 升级至 PHP 8.3 (8.3.6)

下载最新版本 PHP 8.3 (8.3.6)&#xff0c;因为是 FastCGI 执行方式&#xff0c;选择 Non Thread Safe(非线程安全)。 若有以下提示&#xff1a; The mysqli extension is missing. Please check your PHP configuration. 或者 PHP Fatal error: Uncaught Error: Class &qu…

41 POSIX信号量

POSIX信号量 POSIX信号量和System V信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的&#xff0c;但POSIX可以用于线程同步 31节说了信号量&#xff0c;信号量的本质是一个计数器。将共享资源从一个整体划分为很多不部分&#xff0c;就和…

可视化大屏应用场景:智慧安防,保驾护航

hello&#xff0c;我是大千UI工场&#xff0c;本篇分享智慧安防的大屏设计&#xff0c;关注我们&#xff0c;学习N多UI干货&#xff0c;有设计需求&#xff0c;我们也可以接单。 实时监控与预警 可视化大屏可以将安防系统中的监控画面、报警信息、传感器数据等实时展示在大屏上…

【word技巧】Word目录如何设置为对齐?

Word文档的目录有些在修改之后无法对齐&#xff0c;大家是不是会自己手动删除省略号&#xff1f;今天分享一个方法&#xff0c;设置之后&#xff0c;tab一键对齐目录。 先选中目录&#xff0c;然后点击段落设置界面&#xff0c;选择左下角的【制表位】 然后将制表位置设置为【…

蓝桥杯练习系统(算法训练)ALGO-947 贫穷的城市

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 某城市有n个小镇&#xff0c;编号是1~n。由于贫穷和缺乏城市规划的人才&#xff0c;每个小镇有且仅有一段单向的公路通往别…

一机游领航旅游智慧化浪潮:借助前沿智能设备,革新旅游服务效率,构建高效便捷、生态友好的旅游服务新纪元,开启智慧旅游新时代

目录 一、引言 二、一机游的定义与特点 &#xff08;一&#xff09;一机游的定义 &#xff08;二&#xff09;一机游的特点 三、智能设备在旅游服务中的应用 &#xff08;一&#xff09;旅游前的信息查询与预订支付 &#xff08;二&#xff09;旅游中的导航导览与互动体…

SHOW ME THE CODE - 面向对象程序设计之 - 接口隔离原则(ISP)

SHOW ME THE CODE - 面向对象设计系列 1 SHOW ME THE CODE - 面向对象基本概念2 SHOW ME THE CODE - 面向对象程序设计之 - 单一职责原则(SRP)3 SHOW ME THE CODE - 面向对象程序设计之 - 开闭原则&#xff08;OCP&#xff09;4 SHOW ME THE CODE - 面向对象程序设计之 - 里氏…

C语言实验-学生信息管理系统

按以下菜单界面编写学生信息管理系统&#xff1b; 1&#xff09;录入学生信息首先输入学生人数&#xff0c;然后根据学生人数开辟动态数组&#xff1b; 2&#xff09;学生信息包括学号、姓名、性别、三门课成绩、总分&#xff1b;其中学号、姓名、 性别、三门课成绩是需要从键盘…

用git上传本地文件到github

两种方式&#xff1a;都需要git软件&#xff08;1&#xff09;VScode上传 &#xff08;2&#xff09;直接命令行&#xff0c;后者不需要VScode软件 &#xff08;1&#xff09;vscode 上传非常方便&#xff0c;前提是下载好了vscode和git软件 1 在项目空白处右击&#xff0c;弹…

ReentrantReadWriteLock类

为了有了ReentrantLock还需要ReentrantReadWriteLock ReentrantReadWriteLock是一个读写锁&#xff0c;它允许多个读操作同时进行&#xff0c;但在写操作时会阻止其他所有读和写操作。这种锁特别适合于读取远多于写入的场景&#xff0c;因为它可以提高并发性而不会牺牲数据一致…

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

VsCode | 修改首页启动页 Logo

VsCode | 修改首页启动页 Logo 最终效果&#xff1a; 插件的安装 先安装插件 Custom CSS and JS Loader 插件配置 Ctrl Shift P 输入 打开用户设置&#xff0c;在末尾添加 "vscode_custom_css.imports": [""]下载 Logo 下载 Logo 点我下载 引入…

SDB2F3 1.5A,高达28V输出1.2MHz升压转换器芯片IC

一般说明 该SDB2F3是一个恒定的频率&#xff0c;5针SOT23用于小型低功率应用的电流模式升压转换器。 该SDB2F3开关在1.2MHz&#xff0c;并允许使用微小&#xff0c;低成本的电容器和电感2毫米或更少的高度。内部软启动的结果在小浪涌电流和延长电池寿命。 该SDB2F3工作从…

string底层浅析

char简单易用,但是string是万金油 char *b "123"; string a{"123"};a是不是地址 发现a是地址 a的地址是不是和a[0]地址重合 #include<iostream> #include<cstring> using namespace std; int main() {string a{ "123" };char g[…

Pytorch分布式train——pytorch.distributed.launch V.S. torchrun

1. 较早的pytorch.distributed.launch python -m torch.distributed.launch --nproc_per_node4 --nnodes1 --node_rank0 train.py --args XXX 参数解析&#xff1a; nnodes&#xff1a;节点&#xff08;主机&#xff09;的数量&#xff0c;通常一个节点对应一个主机 node_rank…

探索动态内存开辟的奥秘

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 前言 开始之前&#xff0c;我们先来了解一下C/C中程序内存区域划分。 在C/C程序中&#xff0c;内存区域通常被划分为以下几个部分&#xff1a; 1.栈&…

漏洞挖掘之某厂商OAuth2.0认证缺陷

0x00 前言 文章中的项目地址统一修改为: a.test.com 保护厂商也保护自己 0x01 OAuth2.0 经常出现的地方 1&#xff1a;网站登录处 2&#xff1a;社交帐号绑定处 0x02 某厂商绑定微博请求包 0x02.1 请求包1&#xff1a; Request: GET https://www.a.test.com/users/auth/weibo?…

C++设计模式-创建型设计模式

设计模式 设计模式是什么 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案&#xff1b;其实就是解决问题的固定套路。但是要慎用设计模式&#xff0c;有一定的工程代码量之后用它比较…

Hdfs小文件治理策略以及治理经验

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…
最新文章