IOC 조립 Bean (주해 방식) (5)

Spring 의 주해 조립 Bean
Spring2.5          Bean
@Component    Spring   Bean 
Spring        @Component         :
@Repository    DAO       
@Service    Service       
@Controller    Controller       
*****                .

Bean 의 속성 주입:
    ;
@Value(value="itcast")
    private String info;

    :
@Autowired:            .
@Autowired
@Qualifier("userDao")       ---        .

@Autowired
@Qualifier("userDao")       
private UserDao userDao;
   
@Resource(name="userDao")
private UserDao userDao;

Bean 의 다른 속성 설정:
  Bean          :
* init-method   destroy-method.
@PostConstruct    
@PreDestroy    

  Bean     :
@Scope

다음은 테스트 사례 입 니 다.

    

UserService.java
package cn.spring.demo1;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

/*
 *        bean
 */
// spring     
//@Component("userservice")
@Service("userservice")
//scope       
@Scope(value="prototype")
public class UserService {
    @Value(value="  1")
    private String info;
    //       @Autowired(required=false     )
    //@Autowired(required=true)
    //        @Qualifier("userdaoonly")   userdao   @Repository("userdaoonly")  (   )
    //@Qualifier("userdaoonly")
    //@Resource=@Autowired+@Qualifier("userdaoonly")
    @Resource(name="userdaoonly")
    private UserDao userdao;

    public void sayHello(){
        System.out.println("Hello spring Annotation..."+info+userdao);
    }

/*  @Override
    public String toString() {
        return "UserService [info=" + info + ", userdao=" + userdao + "]";
    }*/

    @PostConstruct
    public void setup(){
        System.out.println("   ……");
    }

    @PreDestroy
    public void teardwon(){
        System.out.println("  ……");
    }
}

--------------------------------------------------------------------------------------------------------------------------------------------

UserDao.java
package cn.spring.demo1;

import org.springframework.stereotype.Repository;

@Repository("userdaoonly")
public class UserDao {

}
-------------------------------------------------------------------------------------------------------------------------------------
package cn.spring.demo1;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

//     
public class SpringTest1 {
    @Test
    public void demo1() {
        ClassPathXmlApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

        UserService userservice = (UserService) applicationcontext
                .getBean("userservice");
        //      userservice.sayHello();
        System.out.println(userservice);
        UserService userservice2 = (UserService) applicationcontext
        .getBean("userservice");
        //userservice.sayHello();
        System.out.println(userservice2);
        applicationcontext.close();
    }
}

Spring 3.0 자바 류 를 사용 하여 Bean 정 보 를 정의 하 는 방법 제공
@Configuration
public class BeanConfig {

    @Bean(name="car")
    public Car showCar(){
        Car car = new Car();
        car.setName("  ");
        car.setPrice(40000d);
        return car;
    }

    @Bean(name="product")
    public Product initProduct(){
        Product product = new Product();
        product.setName("  ");
        product.setPrice(3000d);
        return product;
    }
}

다음은 테스트 사례 입 니 다.
//   java   bean     ;
package cn.spring.demo2;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {

    @Bean(name="car")
    public Car showCar() {
        Car car = new Car();
        car.setName("  ");
        car.setPrice(123.00);
        return car;
    }

    @Bean(name="product")
    public Product showProduct() {
        Product product = new Product();
        product.setName("  ");
        product.setPrice(1234.00);
        return product;
    }
}
-----------------------------------------------------------------------------------------------------------------

package cn.spring.demo2;

public class Car {
    private String name;
    private Double price;

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

    public void setPrice(Double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car [name=" + name + ", price=" + price + "]";
    }

}

-----------------------------------------------------------------------------------------------------------------

package cn.spring.demo2;

public class Product {
    private String name;
    private Double price;

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

    public void setPrice(Double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Product [name=" + name + ", price=" + price + "]";
    }

}

-----------------------------------------------------------------------------------------------------------------

package cn.spring.demo2;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.spring.demo1.UserService;

public class SpringTest {
    @Test
    public void demo1() {
        ClassPathXmlApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

        Car car = (Car) applicationcontext
                .getBean("car");
        Product product = (Product) applicationcontext
                .getBean("product");

        System.out.println(car);
        System.out.println(product);
    }
}

실제 개발 에 XML 을 사용 합 니까? 주 해 를 사용 합 니까?
XML:
* bean  
  ;
*            .

      ;    XML  Bean,           .


@Autowired
@Qualifier("orderDao")
private OrderDao orderDao;

마지막 통합, 하 나 는 XML 로 bean 을 등록 하고 하 나 는 주석 bean 을 사용 합 니 다.
    

    

      

    
        
        
    
package cn.spring.demo3;

public class CustomerDao {

}
-------------------------------------------
package cn.spring.demo3;

public class OrderDao {

}
--------------------------------------------
package cn.spring.demo3;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class CustomerService {

    private CustomerDao customerdao;

    @Autowired
    @Qualifier("orderdao")
    private OrderDao orderdao;

    public void setCustomerdao(CustomerDao customerdao) {
        this.customerdao = customerdao;
    }

    @Override
    public String toString() {
        return "CustomerService [customerdao=" + customerdao + ", orderdao="
                + orderdao + "]";
    }
}
-----------------------------------------------
     
package cn.spring.demo3;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
    @Test
    public void demo1() {
        ClassPathXmlApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext2.xml");

        CustomerService customerservice = (CustomerService) applicationcontext
                .getBean("customerservice");
        System.out.println(customerservice);
    }

}
         Spring ,Spring    applicationContext.xml,           ,         Spring    
AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, RequiredAnnotationBeanPostProcessor 
             4 BeanPostProcessor.   4 bean                        。  
   :
1.     @Autowired  ,   Spring     AutowiredAnnotationBeanPostProcessor Bean。       :
2.     @PersistenceContext  ,   Spring     PersistenceAnnotationBeanPostProcessor Bean。     :
3.     @Required  ,   Spring     RequiredAnnotationBeanPostProcessor Bean。      :
4.     @Resource、@ PostConstruct、@ PreDestroy        CommonAnnotationBeanPostProcessor。      : 
  ,                 Bean,        。
     Spring                  ,                  ,          ,Spring       。
        Bean        ,           。   base-package            ,                  。

                               Bean      ,                 (            AutowiredAnnotationBeanPostProcessor    CommonAnnotationBeanPostProcessor),          。

 @Autowired       、           ,          。@Autowired       ,     Spring      bean ,        。        set/get   。
  :         ,         (          )    。( controller       )
      DefaultAnnotationHandlerMapping  AnnotationMethodHandlerAdapter

결론: spring - servlet. xml 에 서 는 @ Controller 주해 가 있 는 모든 종 류 를 스 캔 하고 applicationContext 에서 주 해 를 가 진 다른 종 류 를 스 캔 할 수 있 습 니 다 (@ Controller 주해 가 있 는 종 류 를 걸 러 낼 수도 있 습 니 다).

좋은 웹페이지 즐겨찾기