IOC 조립 Bean (주해 방식) (5)
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 주해 가 있 는 종 류 를 걸 러 낼 수도 있 습 니 다).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
struts2 원본 분석 - IOC 용기의 실현 메커니즘 (다음 편)노드에 type 속성이name 속성이 왜 있는지, Container Builder가 Container 원리를 구축하는 등 여러 가지 방법을 알게 되었다.아쉽게도 블로거는 전편만 썼는데 주로 IOC 용기의 초기화 과정...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.