Study(3) SpringIOC 基于注解的简化配置

  1. 1.什么是组件扫描
  2. 2.作用域
  3. 3.生命周期
  4. 4.延迟加载
  5. 5.基于注解的案例

1.什么是组件扫描

组件扫描:spring容器在启动之后,会扫描指定的包及其子包下面的所有的类,如果该类前面有特定的注解(如果该类前面有特定的注解(如@Component),则spring容器会将这个类纳入容器进行管理(相当于在配置文件中,配置了一个bean元素))

注:下述组件的作用等价,只不过有语义上的差异

    @Component组件:没有明确的角色。
    @Service组件:在业务逻辑层(service)使用。
    @Repository组件:在数据库访问层(dao层)使用。
    @Controller组件:在展现层(mvc –> spring mvc)使用。

2.作用域

@Scope("singleton")
        //singleton:创建一个实例,
        //prototype: 每调一次getBean就会创建一个实例

3.生命周期

@PostConstruct 初始化方法注解,容器创建对象后,会立即调用初始化方法

@PreDestroy  销毁方法注解,spring容器关闭之前,会先调用对象的销毁方法销毁对象,当对象是singleton时,才会起作用

4.延迟加载

@Lazy(true) //延迟加载,当对象是singleton时,才会起作用

注:
spring容器启动后,会将所有作用域为单例的bean创建好,当true时,启动容器不会被实例化,调用getBean时才会实例化。

5.基于注解的案例

(1).新建SomeBean类

    package cn.com.sinodata.annotation;
    import org.springframework.stereotype.Component;

// sb1 是 bean的id,缺省值是首字母小写后的类名(someBean)
    @Component("sb1")
    @Scope("singleton")//singleton:创建一个实例,prototype: 每调一次getBean就会创建一个实例
    @Lazy(true) //延迟加载,
    public class SomeBean {

        //构造之后,初始化方法
        @PostConstruct
        public void init(){
            System.out.println("someBean - init()");
        }

        public SomeBean(){
            System.out.println("SomeBean()");
        }

        //销毁之前,销毁方法
        @PreDestroy
        public void destroy(){
            System.out.println("someBean - destroy()");
        }
    }

(2).annotation.xml

<!--配置组件扫描
        base-package属性:指定要扫描的包名,spring会扫描该包及其子包下面所有的类。
                           如果该类前面有特定的注解(如@Component),则spring容器会
                           将其纳入容器进行管理(相当于配置了一个bean元素)
-->
<context:component-scan base-package="cn.com.sinodata.annotation"/>

(3).测试

AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("annotation.xml");

 //测试作用域
SomeBean someBean = applicationContext.getBean("sb1", SomeBean.class);
SomeBean someBean1 = applicationContext.getBean("sb1", SomeBean.class);
System.out.println(someBean==someBean1);

//测试初始化方法和销毁方法
applicationContext.close();

文章标题:Study(3) SpringIOC 基于注解的简化配置

发布时间:2020-04-23, 17:43:35

最后更新:2020-04-23, 17:43:35