스프링에서 주입에 의존하는 세 가지 방식 분석

6713 단어 spring의존 주입
앞말
일반적인 자바 개발에서 프로그래머는 특정한 클래스에서 다른 클래스에 의존하는 방법을 필요로 한다. 보통 new 의존류 재호출 클래스 실례의 방법이다. 이런 개발에 존재하는 문제는 new의 클래스 실례가 통일적으로 관리되기 어렵다는 것이다. 스프링은 의존 주입 사상을 제기했다. 즉, 의존류는 프로그래머가 실례화하지 않는다는 것이다.스프링 용기를 통해 new 실례를 지정하고 이 대상이 필요한 클래스에 실례를 주입합니다.주입에 의존하는 또 다른 표현은'반전을 제어한다'는 것이다. 통속적인 이해는 평상시에 우리new의 실례가 있는데 이 실례의 제어권은 우리 프로그래머이고 반전을 제어하는 것은 new의 실례 작업을 우리 프로그래머가 하지 않고spring 용기에 맡기는 것을 말한다.
스프링에 의존하는 주입에는 네 가지 방식이 있다
1、set 주입(일반적으로 속성 주입이라고도 부른다)
2. 구조 함수 주입
3. 인터페이스 주입(이것은 현재 기본적으로 사용하지 않는다)
4. 메모 주입(@Autowire)
다음은 set 방법 주입, 구조 함수 주입, 그리고 주해 주입의 용법에 대해 예를 들어 설명한다.
1、set 방법 주입(속성 주입)
UserDao.java

public class UserDao{
 public void inserUser(User user){
  // 
 }
}
UserService.java

public Interface UserService{
 void inserUser(User user);
}
UserServiceImpl.java

public class UserServiceImpl implements UserService{
 private UserDao userDao;
 public void setUserDao(UserDao userDao){
  this.userDao = userDao;
 }
 public void insertUser(User user){
  userDao.insert(user);
 }
}
Spring 프로필

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
 <!-- -->
 <bean id="userDao" class="UserDao"></bean>
 <bean id="userService" class="UserServiceImpl">
 <property name="userDao" ref="userDao">
 </bean>
 </beans>
UserServiceImpl에 userDao를 주입할 수 있습니다.
2. 구조 함수 주입
User.java

public class User{
 // , 
 private String name;
 private Integer age;
 // name,age getter/setter 
 public User(String name,int age){
  this.name = name;
  this.age = age;
 }
}
이제 Spring 프로필을 통해 이 User라는 객체를 주입합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
 <!-- -->
 <bean id="user" class="User">
  <!-- 0 ( )-->
  <constructor-arg type="java.lang.String" index="0" value="zhangsan"/>
  <constructor-arg type="java.lang.Integer" index="1" value="20>
 </bean>
 </beans>
그러면 User 객체에 속성 값을 주입할 수 있습니다.물론 set 방법으로 주입하고 싶은 예도 마찬가지다.바로 UserServiceImpl 구조 함수가 필요하고 형삼은 userDao이기 때문에 setter 방법이 필요하지 않다.
그러면 Spring에 대한 프로필을 이렇게 써야 돼요.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
 <!-- -->
 <bean id="userDao" class="UserDao"></bean>
 <bean id="userService class="UserServiceImpl">
  <!-- 0 ( )-->
  <constructor-arg index="0" ref="userDao">
 </bean>
 </beans>
이렇게 하면 위의 set 방법을 주입하여 달성한 효과도 실현할 수 있다
3. 주석 주입
나는 이런 유형에 @Component,@Service,@Controller 등 직접@Autowire을 추가하지 않고 주입에 성공할 수 있는지 시험해 본 적이 없다. 그러나 비교적 좋은 프로그래밍 습관을 기르고 해당하는 차원에서 상응하는 주해를 추가하는 것을 건의한다.다음 예에서 UserDao는 Modul 레이어에 속하며 Spring에서 @Component 메모를 사용할 수 있습니다.
UserDao.java

@Component
public class UserDao{
 public void inserUser(User user){
  // 
 }
}
UserService.java

public Interface UserService{
 void inserUser(User user);
}
UserServiceImpl.java

// Spring 
@Service
public class UserServiceImpl implements UserService{
 @Autowire
 private UserDao userDao;
 public void insertUser(User user){
  userDao.insert(user);
 }
}
Spring의 구성 파일

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
 <!-- -->
 <!--* , -->
 <context:component-scan base-package="*">
<!--   -->
</context:component-scan>
<context:annotation-config>
<!-- -->
</context:annotation-config>

 <bean id="userDao" class="UserDao"></bean>
 <bean id="userService" class="UserServiceImpl"/>
 </beans>
그러나 개발 과정에서 set 방법 주입을 열었고 주해 주입을 열었다면 Spring은 set 주입을 선택했기 때문에 상응하는 set 방법을 제공하는 것을 잊지 않았다. 그렇지 않으면 실패할 것이다.
비교를 통해 주입 주입은 나머지 주입보다 편리하고 코드와 프로필도 적기 때문에 개발 과정에서 주입 주입을 권장합니다.
총결산
이상은 Spring에서 주입에 의존하는 몇 가지 방식에 대한 모든 소개입니다. 여러분의 학습이나 업무에 어느 정도 도움이 되었으면 좋겠습니다. 의문이 있으면 댓글로 소통할 수 있습니다. 저희에 대한 지지에 감사드립니다.

좋은 웹페이지 즐겨찾기