1. 程式人生 > >Spring(17) 依賴注入後的行為

Spring(17) 依賴注入後的行為

  1. 其實就是在對bean進行各種賦值初始化後讓bean執行某個動作。
    1. 可以讓bean實現InitializingBean介面,然後重寫afterProperties()方法,這樣就可以讓bean在初始化之後自動執行afterProperties()方法。
      1. 呔!程式碼在此
        package initClassPackage;
        
        import org.springframework.beans.factory.InitializingBean;
        
        /**
         * 就是這裡啦,讓InitTest類實現InitializingBean介面,讓後重寫afterPropertiesSet()方法。
         * 這樣的話spring在完成對實現類為InitTest的類之後就會自動執行afterProperties方法
         *其他就沒啥好說了~~~
         */
        public class InitTest implements InitializingBean {
            @Override
            public void afterPropertiesSet() throws  Exception{
                System.out.println("執行afterPropertiesSet()方法");
            }
        }
        
        package testClassPackage;
        
        import initClassPackage.InitTest;
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        
        public class SpringTest {
            public static void main(String []args){
                ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
                InitTest initTest = applicationContext.getBean("test", InitTest.class);
            }
        }
        
        <?xml version="1.0" encoding="GBK"?>
        <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns="http://www.springframework.org/schema/beans"
               xsi:schemaLocation="http://www.springframework.org/schema/beans
        	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
        
            <bean id="test" class="initClassPackage.InitTest"/>
        
        </beans>

         

    2. 上面那樣子操作是在java程式碼裡實現依賴注入後的動作的,事實上還有一種程式碼汙染比較小也比較靈活的做法,也可以達到一樣的效果。就是在bean宣告中加入init-method屬性。
      1. 話不多說,直接上菜
        <?xml version="1.0" encoding="GBK"?>
        <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns="http://www.springframework.org/schema/beans"
               xsi:schemaLocation="http://www.springframework.org/schema/beans
        	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
        
            <bean id="test" class="initClassPackage.InitTest" init-method="init"/>
        
        </beans>
        package initClassPackage;
        
        import org.springframework.beans.factory.InitializingBean;
        
        /**
         * 1、就是這裡啦,讓InitTest類實現InitializingBean介面,讓後重寫afterPropertiesSet()方法
         * 這樣的話spring在完成對實現類為InitTest的類之後就會自動執行afterProperties方法
         * 2、在宣告以實現類為InitTest的bean中用int-method屬性指定依賴注入後執行init方法。
         *其他就沒啥好說了~~~
         */
        public class InitTest implements InitializingBean {
            @Override
            public void afterPropertiesSet() throws  Exception{
                System.out.println("執行afterPropertiesSet()方法");
            }
        
            public void init(){
                System.out.println("執行init方法");
            }
        }
        

        這是我看李剛編著的《輕量級javaEE企業應用實戰(第五版)-Struts2+Spring5+Hibernate5/JAP2》後總結出來的。