Spring配置
从Spring2.5开始支持基于注解的配置,使用@Configuration
注解标注配置类,通过AnnotationConfigApplicationContext
容器类读取注解配置信息。一个简单的例子如下,其中@Bean
注解相当于配置文件中的<bean .../>
。
-
基础类代码
public class Student { private Integer sId; private String sName; private String sGrade; private String sClass; private Integer sAge; private Integer sGender; public Integer getsId() { return sId; } public void setsId(Integer sId) { this.sId = sId; } public String getsName() { return sName; } public void setsName(String sName) { this.sName = sName; } public String getsGrade() { return sGrade; } public void setsGrade(String sGrade) { this.sGrade = sGrade; } public String getsClass() { return sClass; } public void setsClass(String sClass) { this.sClass = sClass; } public Integer getsAge() { return sAge; } public void setsAge(Integer sAge) { this.sAge = sAge; } public Integer getsGender() { return sGender; } public void setsGender(Integer sGender) { this.sGender = sGender; } @Override public String toString() { return "Student{" + "sId=" + sId + ", sName='" + sName + '\'' + ", sGrade='" + sGrade + '\'' + ", sClass='" + sClass + '\'' + ", sAge=" + sAge + ", sGender=" + sGender + '}'; } }
-
配置类代码
@Configuration public class SimpleConfig { @Bean public Student getStudent(){ Student res = new Student(); res.setsAge(18); res.setsClass("2"); res.setsGender(1); res.setsGrade("小1"); res.setsId(0); res.setsName("小王"); return res; } }
-
测试代码
public class AnnoConfigTest { private AnnotationConfigApplicationContext ctx; @Before public void doBefore(){ ctx=new AnnotationConfigApplicationContext(); } @After public void doAfter(){ ctx.registerShutdownHook(); } @Test public void test01(){ ctx.register(SimpleConfig.class); ctx.refresh(); Student student = ctx.getBean(Student.class); System.out.println(student); } }
-
测试结果
Student{sId=0, sName='小王', sGrade='小1', sClass='2', sAge=18, sGender=1}
配置注解说明
-
@Bean
包括参数如下:
参数名称 参数说明 默认值 name 默认参数,用于配置Bean的名称 无 initMethod 初始化方法,用于标注初始化后执行的方法 无 destroyMethod 销毁方法,用于标注类销毁前执行的方法 无 autowireCandidate 用于说明是否自动注入 true 表1:@Bean注解说明 -
@Scope
用于配置Bean的作用域,作用相当于
<bean scope=""/>
,默认值同样为"singleton"
-
@Lazy
用于配置Bean的懒加载,作用相当于
<bean lazy-init="true" />
,默认值为true
示例代码如下:
@Bean(name = "Simple-Bean", initMethod = "initFunc", destroyMethod = "destroyFunc")
@Scope("singleton")//设定作用域
@Lazy//懒加载
public SimpleBean getSimpleBean() {
SimpleBean bean = new SimpleBean();
bean.setMessage("实现初始化回调和销毁回调方法");
return bean;
}
配置容器事件
Spring针对容器设定了四种容器事件,分别是容器刷新事件(容器创建和刷新时执行)、容器开始事件(调用start()
方法时执行)、容器停止事件(调用stop()
方法时执行)、容器关闭事件(调用close()
方法时执行)。通过配置实现了ApplicationListener
接口的类可以设定这几种事件。
新建4个类,分别实现ApplicationListener
接口,代码如下:
public class ContextRefreshEvent implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("====容器刷新refresh事件执行====");
}
}
public class ContextStartEvent implements ApplicationListener<ContextStartedEvent> {
@Override
public void onApplicationEvent(ContextStartedEvent event) {
System.out.println("====容器启动start事件执行====");
}
}
public class ContextStopEvent implements ApplicationListener<ContextStoppedEvent> {
@Override
public void onApplicationEvent(ContextStoppedEvent event) {
System.out.println("====容器停止stop事件执行====");
}
}
public class ContextCloseEvent implements ApplicationListener<ContextClosedEvent> {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
System.out.println("====容器关闭close事件执行====");
}
}
配置类中新增这四个类的Bean对象
@Bean
public ContextStartEvent getStart(){
return new ContextStartEvent();
}
@Bean
public ContextRefreshEvent getRefresh(){
return new ContextRefreshEvent();
}
@Bean
public ContextStopEvent getStop(){
return new ContextStopEvent();
}
@Bean
public ContextCloseEvent getClose(){
return new ContextCloseEvent();
}
测试代码:
public class ContextEventTest {
private ConfigurableApplicationContext ctx;
@Before
public void doBefore(){
ctx=new AnnotationConfigApplicationContext(SimpleConfig.class);
}
@After
public void doAfter(){
ctx.registerShutdownHook();
}
@Test
public void test(){
ctx.start();
ctx.stop();
ctx.close();
}
}
打印结果
====容器刷新refresh事件执行====
====容器启动start事件执行====
====容器停止stop事件执行====
====容器关闭close事件执行====
【注】原创文章,欢迎点赞、转发、评论。转载请先与作者联系