0

春の勉強を始めたばかりです。サンプル プログラムを実装しているときに問題が発生したので、このフォーラムで調べて答えを得ることを考えました。

次は spring.xml です

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org    /dtd/spring-beans-2.0.dtd">

<beans>
    <bean id="triangle" class="org.springdemo.Triangle" autowire="byName">
    </bean>

    <bean id="employee" class="org.springdemo.emp.Employee" autowire="byName">
    
    </bean>

    <bean id="address" class="org.springdemo.emp.Address">
        <property name="city" value="PUNE"></property>
        <property name="street" value="MH"></property>
        <property name="pin" value="411013"></property>
    </bean>

    <bean id="customerDAO" class="org.mykong.springdb.Customer">

    </bean>

</beans>

これが私のクライアントプログラムです:

 public static void main( String[] args )
    {
        ApplicationContext context = 
            new ClassPathXmlApplicationContext("spring.xml");

        Customer customer = (Customer) context.getBean("customerDAO");
 System.out.println(customer.getBeanName());

    }

私のカスタマー Bean:

     public class Customer implements BeanNameAware, BeanPostProcessor{

            private String name;
        private int age;

        protected Customer() {

        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    
        public String toString() {
            return "Customer id : "  + " , Name : "  + this.name + " , Age: " +     this.age;
        }

        public void setBeanFactory(BeanFactory arg0) throws BeansException {
        
        
        }

        private String beanName = null;
        public void setBeanName(String name) {
            this.beanName = name;
        }

        public String getBeanName() {
            return beanName;
        }

        public Object postProcessAfterInitialization(Object bean, String arg1)
                throws BeansException {
        
            System.out.println(" IN : postProcessAfterInitialization - bean         initialized" + bean.getClass() );
            return bean;
        }

        public Object postProcessBeforeInitialization(Object bean, String arg1)
                throws BeansException {

            System.out.println(" IN : postProcessBeforeInitialization "  );
            return bean;
        }
        }

質問 1: 私の spring.xml には 4 つの Bean に関する構成があります。ただし、出力は 3 つの Bean に対してのみ行われます (customerDAO を除く)。なんで?

質問 2: 前後のプロセス初期化メソッドを customerDAO に対してのみ呼び出したい場合はどうすればよいですか? それはとても簡単かもしれませんか?私はわかりません。ですが、回答をお願いします。前もって感謝します

出力:

IN : postProcessBeforeInitialization IN : postProcessAfterInitialization - bean 初期化クラス org.springdemo.Triangle IN : postProcessBeforeInitialization IN : postProcessAfterInitialization - bean 初期化クラス org.springdemo.emp.Address IN : postProcessBeforeInitialization IN : postProcessAfterInitialization - bean 初期化クラス org.springdemo.emp.Employee customerDAO

4

1 に答える 1

3

の目的はBeanPostProcessor、他の Bean の初期化をインターセプトすることです。Spring は、ポストプロセス メソッドが呼び出されたときにポストプロセッサが完全に初期化されることを保証するため、独自の初期化をインターセプトできません。

この Bean の初期化後にアクションを実行する必要がある場合は、次のいずれかを実行できます。

  • 実装InitializingBeanとオーバーライドafterPropertiesSet
  • init-methodの属性を使用<bean>して、呼び出されるメソッドの名前を指定します
  • 呼び出されるメソッドにアノテーションを付ける@PostConstruct
于 2012-10-02T07:17:47.077 に答える