- 太长了,分开写吧,到使用注解定制声明周期了。
- 和前面使用init-method和destory-method方法来指定初始化之后使用那个方法和销毁前使用哪个方法一样,使用@PostConstruct和@PreDestory注解也可以达到同样的效果。
- 这里是在上个例子的基础上修改的。
package InstanceClass; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; //同上 @Component public class ClassB { private String name; void setName(String name) { this.name = "ok1"; } public void thisIsMyName(){ System.out.println("B' s name is " + name); } @PostConstruct public void init(){ System.out.println("It is B's init"); } @PreDestroy public void destory(){ System.out.println("It is B's destory"); } }
测试类
package TestPackage; import InstanceClass.ClassA; import InstanceClass.ClassB; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; //测试类 public class SpringTest { public static void main(String []args){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); ClassA classA = applicationContext.getBean("classA", ClassA.class); System.out.println(classA.toString()); classA = applicationContext.getBean("classA", ClassA.class); System.out.println(classA.getClassB().toString()); ClassB classB = applicationContext.getBean("classB", ClassB.class); System.out.println(classB.toString()); ((ClassPathXmlApplicationContext) applicationContext).registerShutdownHook(); } }
-
接下来是关于预初始化的两个注解,第一个@DependsOn可以指定在初始化被@DependsOn修饰的bean之前初始化@DependsOn参数的bean,代码
@DependsOn({"classB"}) @Scope("prototype") @Component("classA") public class ClassA { ... }
测试类
package TestPackage; import InstanceClass.ClassA; import InstanceClass.ClassB; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; //测试类 public class SpringTest { public static void main(String []args){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); ClassA classA = applicationContext.getBean("classA", ClassA.class); System.out.println(classA.toString()); classA = applicationContext.getBean("classA", ClassA.class); System.out.println(classA.getClassB().getName()); ClassB classB = applicationContext.getBean("classB", ClassB.class); System.out.println(classB.toString()); ((ClassPathXmlApplicationContext) applicationContext).registerShutdownHook(); } }
可以看到输出,说明B的的确在A之前 被初始化了
It is B's init InstanceClass.ClassA@928763c null InstanceClass.ClassB@15f47664 It is B's destory
然后是@Lazy注解,它的参数是ture或者false,表示是否 预初始化被@Lazy注解修饰的bean,当然啦,如果这个bean是被其他bean的@DependsOn的注解的参数的话,它也会被初始化的。
-
这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。
Spring 进阶(6) 使用注解配置bean(2)
猜你喜欢
转载自blog.csdn.net/weixin_39452731/article/details/84894512
今日推荐
周排行