factorybean 声明_关于Spring容器几种常用初始化InitializingBean 、DisposableBean 及销毁Bean及复杂FactoryBean类的优先级顺序说明及相关代码...

一、用例说明

对于通过Spring的Bean注入对象,关于“如何实现对象初始化前后、初始加载及销毁方法前后等不同阶段解析处理”、“简单初始化配置实现复杂的bean加载过程根据隐蔽自动化”等等相关场景用例分析说明,具体通过@PostConstruct 和 @PreDestroy 、InitializingBean和 DisposableBean接口、FactoryBean接口等方式实现,

二、代码用例

1.如何实现对象初始化前后、初始加载及销毁方法前后等不同阶段解析处理,优先级:Constructor > @PostConstruct > InitializingBean > init-method > @PreConstruct > DisposableBean > destroy-methodimport javax.annotation.PostConstruct;@b@import javax.annotation.PreDestroy;@b@import org.springframework.beans.factory.InitializingBean;@b@@b@public class SpringBeanInitingLevel  implements  InitializingBean,DisposableBean{@b@@b@    public SpringBeanInitingLevel() {  @b@       System.out.println(" 【Level】 1 ============================== >   : Constructor ");  @b@    }  @b@     @b@    @PostConstruct  @b@    public void postConstruct() {  @b@       System.out.println(" 【Level】 2 ============================== >   : PostConstruct ");  @b@    } @b@    @b@     @b@    @Override  @b@    public void afterPropertiesSet() throws Exception {  @b@       System.out.println(" 【Level】 3 ============================== >   : InitializingBean  @afterPropertiesSet ");  @b@    }  @b@    @b@    public void initMethod() {  @b@   System.out.println(" 【Level】 4 ============================== >   : init-method ");  @b@    }  @b@    @b@    @PreDestroy@b@    public void preConstruct() {  @b@       System.out.println(" 【Level】 5 ============================== >   : PreConstruct ");  @b@    }  @b@    @b@    @b@    @b@    @Override@b@    public void destroy() throws Exception {@b@     System.out.println(" 【Level】 6 ============================== >   : DisposableBean   @destory  ");  @b@@b@    }@b@@b@    public void destoryMethod(){@b@       System.out.println(" 【Level】 7 ============================== >   : destroy-method  ");  @b@    }@b@@b@}

spring配置如下<?xml  version="1.0" encoding="UTF-8"?>@b@@b@@b@@b@@b@@b@ @b@

测试用例类SpringBeanInitingLevelTestimport org.junit.Test;@b@import org.springframework.test.context.ContextConfiguration;@b@import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;@b@@b@@ContextConfiguration(locations={"classpath*:spring-*.xml"})@b@public class SpringBeanInitingLevelTest extends  AbstractJUnit4SpringContextTests {@b@@b@ @b@ @Test@b@ public  void   test(){@b@   System.out.println(" junit  user  case 1 ...  ");@b@}@b@    @b@@b@}

运行控制台输出【Level】 1 ============================== >   : Constructor @b@ 【Level】 2 ============================== >   : PostConstruct @b@ 【Level】 3 ============================== >   : InitializingBean  @afterPropertiesSet @b@ 【Level】 4 ============================== >   : init-method @b@ junit  user  case 1 ...   @b@ 【Level】 5 ============================== >   : PreConstruct @b@ 【Level】 6 ============================== >   : DisposableBean   @destory  @b@ 【Level】 7 ============================== >   : destroy-method

2.下面通过用例来具体说明 - 通过配置古龙的代表作《流星蝴蝶剑》销售量按照行业标准来鉴别该书是否好书,具体代码如下

Book类public class Book {@b@@b@private String title;@b@@b@private String author;@b@@b@private  boolean isGood;@b@@b@public Book(String title, String author) {@b@super();@b@this.title = title;@b@this.author = author;@b@}@b@@b@public String getTitle() {@b@return title;@b@}@b@@b@public void setTitle(String title) {@b@this.title = title;@b@}@b@@b@public String getAuthor() {@b@return author;@b@}@b@@b@public void setAuthor(String author) {@b@this.author = author;@b@}@b@@b@public boolean isGood() {@b@return isGood;@b@}@b@@b@public void setGood(boolean isGood) {@b@this.isGood = isGood;@b@}@b@}

GoodBook类 - FactoryBean工厂实现类import org.springframework.beans.factory.FactoryBean;@b@@b@public class GoodBook implements FactoryBean {@b@@b@private  int  sales;//销售量@b@@b@public int getSales() {@b@return sales;@b@}@b@@b@public void setSales(int sales) {@b@this.sales = sales;@b@}@b@@b@@Override@b@public Book getObject() throws Exception {@b@Book book=new Book("流行蝴蝶剑","古龙");@b@if(sales>100000)@b@book.setGood(true);@b@else@b@book.setGood(false);@b@return book;@b@}@b@@b@@b@@Override@b@public Class> getObjectType() {@b@return Book.class;@b@}@b@@b@@b@@Override@b@public boolean isSingleton() {@b@return false;@b@}@b@@b@}

Gulong类 - 古龙本人public class Gulong {@b@@b@private Book book;@b@@b@public Book getBook() {@b@return book;@b@}@b@@b@public void setBook(Book book) {@b@this.book = book;@b@}@b@@b@}

spring配置<?xml  version="1.0" encoding="UTF-8"?>@b@@b@@b@@b@@b@ @b@ @b@       @b@ @b@ @b@ @b@       @b@ @b@ @b@

SpringFactoryBeanTest测试类import org.springframework.context.ApplicationContext;@b@import org.springframework.context.support.ClassPathXmlApplicationContext;@b@@b@public class SpringFactoryBeanTest {@b@ @b@public static void main(String[] args) {@b@@b@ ApplicationContext  context  = new  ClassPathXmlApplicationContext("classpath:spring-context.xml");  @b@ @b@ Gulong  gulong=(Gulong)context.getBean("gulong");@b@ @b@ System.out.println(" 古龙的代表作《"+gulong.getBook()+"》是一本"+(gulong.getBook().isGood()?"有趣":"无聊")+"书 ");@b@@b@}@b@@b@}

控制台结果古龙的代表作《com.xwood.test.spring.Book@46e06703》是一本有趣书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FactoryBean是Spring框架中的一个接口,它允许我们在创建Bean的时候,通过编写自定义的代码来控制Bean的实例化过程。具体来说,FactoryBean可以让我们在Bean的实例化过程中,通过编写自定义的代码来控制Bean的创建、初始化销毁过程。 下面是一个使用FactoryBean的示例代码: 首先,我们需要编写一个实现了FactoryBean接口的,例如: ``` public class MyFactoryBean implements FactoryBean<MyBean> { @Override public MyBean getObject() throws Exception { // 在这里编写自定义的代码,来创建并返回一个MyBean对象 return new MyBean(); } @Override public Class<?> getObjectType() { return MyBean.class; } @Override public boolean isSingleton() { return true; } } ``` 在上面的代码中,我们实现了FactoryBean接口,并重写了其中的三个方法: - getObject()方法:在这个方法中,我们编写自定义的代码来创建并返回一个MyBean对象。 - getObjectType()方法:在这个方法中,我们返回MyBean.class,表示这个FactoryBean创建的是一个MyBean对象。 - isSingleton()方法:在这个方法中,我们返回true,表示这个FactoryBean创建的是一个单例对象。 接下来,我们需要在Spring的配置文件中,声明这个FactoryBean,例如: ``` <bean id="myBean" class="com.example.MyFactoryBean"/> ``` 在上面的配置中,我们声明了一个id为myBean的Bean,它的class属性指定为MyFactoryBean。这样,在Spring启动的时候,Spring会自动调用MyFactoryBean的getObject()方法来创建一个MyBean对象,并将这个对象作为myBean这个Bean的实例。 总结一下,FactoryBean是Spring框架中的一个接口,它允许我们通过编写自定义的代码来控制Bean的实例化过程。我们可以在实现了FactoryBean接口的中,编写自定义的代码来创建、初始化销毁Bean对象。在Spring的配置文件中,我们可以声明一个FactoryBean,并将它的class属性指定为我们实现的FactoryBean的全限定名。这样,在Spring启动的时候,Spring会自动调用我们实现的FactoryBean的getObject()方法来创建Bean对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值