zoukankan      html  css  js  c++  java
  • Spring IOC基础回顾 — 组件扫描和装配

    注解形式配置应用IOC

    在类定义、方法定义、成员变量定义前使用,格式:@注解标记名

    理解与回顾
    使用Spring IOC 管理对象(定义bean、bean的控制(scope/init-method等属性))及对象关系(DI: set注入/构造器注入)。
    控制反转:改变了对象获取方式。 new方式获取 --> spring容器创建对象之后注入进来使用。降低了耦合。

    1. 组件自动扫描

    指定包路径,将包下所有组件进行扫描,组件类定义前有注解标记则会扫描到Spring容器。

    基于注解的组件扫描方式:

    1. 开启组件扫描
    spring.xml
    ...
    <context:component-scan base-package="org.***" />
    ...
    
    1. 组件前添加注解
    • 扫描标记注解:
      @Component //其他组件
      @Controller //控制层
      @Service //业务层组件 xxxService
      @Repository //数据访问层组件 xxxDao
    • 对象管理注解:
      @Scope
      @PostConstruct
      @PreDestroy
    • 举例:
    @Component("idName")  //扫描ExampleBean 组件,默认id=exampleBean 
    //@ComponentScan   // 注解方式开启组件扫描
    @Scope("singleton")  // 等价于<bean scope="">,默认单例。
    public class ExampleBean {
        @PostConstruct //等价于<bean init-method="" >
        public void init() {
            System.out.println("初始化逻辑");
        }
    
        @PreDestroy // 等价于<bean destroy-method="" >  
        public void destroy() {
            System.out.println("释放资源,释放spring容器对象资源,触发单例对象的destroy-method");
        }
    
        public void excute() {
            System.out.println("do sth");
        }
    } 
    

    2. 组件依赖:为bean添加注解,实现自动注入

    • @Resource:由JDK提供,可以定义在变量前或者setXXX方法前。

    • @Autowired:由Spring提供,可以定义在变量前或者setXXX方法前。
      二者都可以实现注入,不存在多个匹配类型,使用Resource和Autowired都可以。
      如果存在多个匹配类型,可以按名称注入:
      @Resource(name="指定名称") 或
      @Autowired
      @Qualifier("指定名称")

    • 举例:

    @Component
    public class Student {
        //需要调用Computer和Phone对象
        @Autowired
        private Computer c; //注入Computer对象
        //使用注解set方法也可省略,xml的配置方式不能省略(set注入方式)
        //public void setC{
        //    this.c = c;
        //}
        @Autowired(required=false)  // 设置required属性为false,会尝试自动注入,若没有匹配的bean,则未注入,p仍为null。
        //@Qualifier("p")  //指定名称注入
        private Phone p;     //注入Phone对象
        ...
    }
    
    • @Autowired或@Resource是对象的注入,简单值可以用@Value("#{id.key}")注入(表达式注入)。
      举例:
      xxx.properties
    username=root
    password=123456
    

    spring.xml

    <util:properties id="db"  location="classath:xxx.properties">
    </util:properties>
    

    3. Spring IOC应用小结

    三种配置方案:1. xml中显示配置; 2. java中显示配置; 3. 组件扫描,自动注入。

    自己写的组件用简洁的注解方式自动注入(装配)即可;
    第三方组件无法在其类上添加@Component和@AutoWired注解,必须用XML或JavaConfig 显式配置。
    总之,以注入方式成全对象依赖关系,实现了组件解耦。

  • 相关阅读:
    【SICP练习】129 练习3.60
    【SICP练习】128 练习3.59
    【SICP练习】127 练习3.58
    【SICP练习】126 练习3.57
    【SICP练习】125 练习3.56
    【SICP练习】124 练习3.55
    【SICP练习】123 练习3.54
    【SICP练习】122 练习3.53
    【SICP练习】121 练习3.52
    【SICP练习】120 练习3.51
  • 原文地址:https://www.cnblogs.com/eaglediao/p/8735054.html
Copyright © 2011-2022 走看看