总结Spring注解第二篇

  • @Lazy @Scope
 /**
     *  1.使用scope来控制bean的作用范围,SCOPE_SINGLETON创建一个bean,SCOPE_PROTOTYPE表示创建多个bean实例对象
     *  2.返回值等同于配置文件中的Class,方法名等同于id(xml)
     *  3.懒加载在获取容器中对象的时候创建对象,默认是在ioc容器创建的时候创建对象
     * @return
     */
    @Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON)
    @Lazy
    @Bean(value = "p2")
    public Person person(){
        System.out.println("ioc创建bean对象...");
        return new Person("qqq",33);
    }
<!--    包扫描,只要标注了@Controller@Service,@Repository@Component四个注解,都会扫描-->
    <!--    <context:component-scan base-package="com.zyn"></context:component-scan>-->

    <bean id="person" class="com.zyn.bean.Person">
        <property name="name" value="赵亚楠"></property>
        <property name="age" value="18"></property>
    </bean>
  • 给ioc容器中注入组件的第四种方式,是spring提供的,实现FactoryBean接口工厂
public class MyFactoryBean implements FactoryBean<Teacher> {

    //返回一个Teacher bean对象,此对象会由工厂注入到ioc容器中
    @Override
    public Teacher getObject() throws Exception {

        return new Teacher();
    }

    //获取泛型对象bean的字节码对象
    @Override
    public Class<?> getObjectType() {
        return Teacher.class;
    }

    //true: 返回一个单实例teacher对象,容器中保存一份
    //false: 每次获取bean对象时,将会创建一个新的bean。多实例对象
    @Override
    public boolean isSingleton() {
        return false;
    }
}
  • @Bean :向ioc容器中注入对象实例

当@Scope(scopeName = “singleton”)时
在这里插入图片描述

  • 当@Scope(scopeName = “prototype”)时,在容器获取id时创建对象,并且ioc容器并不会管理这个bean,也不会帮你自动执行destory销毁方法,需要你手动销毁ioc容器中的bean对象。
@Configuration
public class BeanLifeCycleConfig {


    @Bean(initMethod = "init",destroyMethod = "destory")
    @Scope(scopeName = "prototype")
    public Student student1(){

        return new Student();
    }
}

在这里插入图片描述

  • 也可以通过bean实现InitializingBean和DisposableBean两个接口来实现bean的初始化和销毁方法:
public class Air implements InitializingBean, DisposableBean {
    @Override
    public void destroy() throws Exception {
        //销毁bean时执行的方法
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        //在bean初始化时执行的方法
    }
}
  • 通过在方法上标注@PostContruct和@Predestroy这两个注解,使得在bean的生命周期中执行初始化和销毁工作。

    1. @PostContruct: 在bean创建完成并属性赋值完成后,来执行初始化方法。
    2. @Predestroy: 在容器销毁bean之前来回调标注此注解的方法进行清理工作。

在这里插入图片描述

@Component
public class Computer {

    public Computer() {
        System.out.println("Computer执行构造方法...");
    }

    @PostConstruct
    public void init(){
        System.out.println("Computer执行init方法...");
    }

    @PreDestroy
    public void destory(){
        System.out.println("Computer执行destory方法...");
    }
}
  • 通过实现BeanPostProcessor接口来对bean的初始化前后进行一些初始化工作
public interface BeanPostProcessor {
	//在初始化之前对bean进行一些处理工作
    Object postProcessBeforeInitialization(Object var1, String var2) throws BeansException;
	//在初始化之后对bean进行一些处理工作
    Object postProcessAfterInitialization(Object var1, String var2) throws BeansException;
}
发布了2 篇原创文章 · 获赞 4 · 访问量 133

猜你喜欢

转载自blog.csdn.net/Hepburnan/article/details/104426113