spring5 工厂bean
1.工厂bean
package com.cj.spring5; import org.springframework.beans.factory.FactoryBean; public class MyBean implements FactoryBean<Course> { //定义返回的bean @Override public Course getObject() throws Exception { Course course = new Course("好看的书"); return course; } @Override public Class<?> getObjectType() { return null; } @Override public boolean isSingleton() { return false; } }
2.bean 的作用域
singleton 单例 获取xml文件时创建对象
prototype 多实例 getBean时创建对象
3. bean 的生命周期
1.执行无参构造创建bean实例
2.set属性注入
初始化之前
3.初始化的方法
初始化之后
4.获取bean实例对象
5.执行销毁的方法
package com.cj.spring5; public class Goods { private String name; public Goods(){ System.out.println("1.无参构造"); } public Goods(String name) { this.name = name; } public void setName(String name) { this.name = name; System.out.println("2.属性"); } public void initMethod(){ System.out.println("3.初始化"); } public void destoryMethod(){ System.out.println("5.销毁"); } }
public void test8(){ //获取xml //ApplicationContext xml = new ClassPathXmlApplicationContext("bean4.xml"); ClassPathXmlApplicationContext xml = new ClassPathXmlApplicationContext("bean4.xml"); //获取对象 Goods goods = xml.getBean("goods", Goods.class); System.out.println("4.获取bean实例"); //调用 xml.close(); //System.out.println(goods.toString()); }
<bean id="goods" class="com.cj.spring5.Goods" init-method="initMethod" destroy-method="destoryMethod"> <property name="name" value="鱼干"/> </bean>
3.1 后置处理器
<bean id="myBeanPost" class="com.cj.spring5.MyBeanPost"/>
package com.cj.spring5; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.lang.Nullable; public class MyBeanPost implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("初始化之前"); return null; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("初始化之后"); return null; } }