初始化、创建、初始化、销毁
方法一:
《@Bean+返回值形式》
init(初始化bean) destroy(销毁bean)
【xml】:
在bean标签中只用属性及属性值为:
init-method="myInit" destroy-method="myDestroy"
如:
//bean为Student类对象:
<bean id="student" class="org.neowang.entity.Student" scope="singleton" init-method="myInit" destroy-method="myDestroy">
......
</bean>
【配置类】:
在@Bean注解中:
initMethod = "myInit", destroyMethod = "myDestroy"
如:
//bean为Student类对象:
@Bean(value="stu", initMethod = "myInit", destroyMethod = "myDestroy") //id="stu"
public Student myStudent(){
Student student = new Student(100,"zs",88);
student.setAddress(new Address("xa","bj"));
return student;
}
IOC容器在初始化时,会自动创建对象(构造方法) -> init -> ...... -> 当容器关闭时 调用destroy...
方法二:
《三层组件: 扫描器 + 三层注解(4个)》
三层注解:
三层注解(功能性注解【三层、功能性类 如:转换器类】):@Component
控制层:@Controller
业务层:@Service
持久层:@Repository
JAVA规范:JSR250
@PostConstruct: 相当于方法一的init
@PreDestroy: 相当于方法一的destroy
使用方法:
将响应组件 加入@Component注解、给初始化方法加@PostConstruct、给销毁方法加@PreDestroy
如果要获取@Component注解中的bean,那么该bean的名字就是@Component(value="xxx")的value值
如:
//MyIntToStringConverter[转换器类]
@Component(value = "myConverter") //即在容器中该bean的id值为myConverter
public class MyIntToStringConverter {
@PostConstruct
public void init(){
System.out.println("转换...Init...");
}
public void myConverter(){
System.out.println("转换方法......");
}
@PreDestroy
public void destroy(){
System.out.println("转换...destroy...");
}
}
方法三:
《适用于三层组件(扫描器+三层组件)》
实现(两个)接口
InitializingBean 初始化
DisposableBean 销毁
初始化:
只需要实现 InitializingBean中的afterPropertiesSet()
销毁:
实现DisposableBean 中的destroy()方法
如:
// MyFunction类
@Component
public class MyFunction implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("MyFunction初始化...init...");
}
public void myMethod(){
System.out.println("MyFunction方法实现...");
}
@Override
public void destroy() throws Exception {
System.out.println("MyFunction销毁...destroy");
}
}
【对于方法二和方法三:】
如果时注解形式,随便写一个方法,然后加上相应的注解即可;
如果是接口形式,必须 实现接口中规定的方法来实现bean的初始化和销毁;
方法四:
《适用于三层组件(扫描器+三层组件)》
实现(一个)接口
BeanPostProcessor
【会给容器中的所有bean加初始化、销毁方法;也可以通过接口中的方法参数修改当前的bean中的对象属性值】
如:
//MyXxxx类
@Component
public class MyXxxx implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("MYXxxx【"+beanName+"】...初始化...");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("MYXxxx...销毁...");
return bean;
}
}