Study(3) SpringIOC 基于注解的简化配置
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