Spring的常见接口复习

发表时间:2018-06-19 14:29:42 浏览量( 9 ) 留言数( 0 )

学习目标:

1、搭建一个简易的代理服务

2、了解nginx的负载均衡原理

3、掌握搭建nginx代理服务器和负载均衡


学习过程:

spring中InitializingBean接口使用理解

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。

实现InitializingBean接口与在配置文件中指定init-method有什么不同?


修改配置文件,加上init-method配置,修改如下:


<bean id="testInitializingBean" class="com.TestInitializingBean" init-method="testInit"></bean>

系统则是先调用afterPropertiesSet方法,然后在调用init-method中指定的方法。


Spring 中Bean的生命周期与InitializingBean和DisposableBean

DisposableBean/destroy-method

实现org.springframework.beans.factory.DisposableBean接口的bean允许在容器销毁该bean的时候获得一次回调。DisposableBean接口也只规定了一个方法:

void destroy() throws Exception;



为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。


下面示例为实现ApplicationContextAware的工具类,可以通过其它类引用它以操作spring容器及其中的Bean实例。

public class SpringContextHolder implements ApplicationContextAware {  

    private static ApplicationContext applicationContext = null;  

  

    /** 

     * 获取静态变量中的ApplicationContext. 

     */  

    public static ApplicationContext getApplicationContext() {  

        assertContextInjected();  

        return applicationContext;  

    }  


前面我们已经多次使用了,这里就不再啰嗦了。





当容器初始化完成之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进行操作。



BeanNameAware

可以获得在配置文件中定义好的Bean的ID名,因为有setter函数,获得之后可以通过这个id名,动态获得对应的实例对象

public class LogginBean implements BeanNameAware {


private String beanName = null;


public void setBeanName(String beanName) {


this.beanName = beanName;


}


}



springBeanFactoryAware 

(转)要直接在自己的代码中读取spring的bean,我们除了根据常用的set外,也可以通过spring的BeanFactoryAware接口实现,只要实现setBeanFactory方法就可以,



private BeanFactory               beanFactory;  

  

public void setBeanFactory(BeanFactory beanFactory) throws BeansException {  

this.beanFactory = beanFactory;  

}  

 


这样我们就可以直接拿东西用了,如


Object  object = beanFactory.getBean(beanName);  





FactoryBean

             FactoryBean是一个接口,当在IOC容器中的Bean实现了FactoryBean后,通过getBean(String BeanName)获取到的Bean对象并不是FactoryBean的实现类对象,而是这个实现类中的getObject()方法返回的对象。要想获取FactoryBean的实现类,就要getBean(&BeanName),在BeanName之前加上&。

 ClassPathXmlApplicationContext cpxa = new ClassPathXmlApplicationContext(url);  

        Object school=  cpxa.getBean("factoryBeanPojo");  

        FactoryBeanPojo factoryBeanPojo= (FactoryBeanPojo) cpxa.getBean("&factoryBeanPojo");