Bean的生命周期

初始化、创建、初始化、销毁

方法一:
《@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;
                            }
                        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值