스프링에서 주입에 의존하는 세 가지 방식 분석
일반적인 자바 개발에서 프로그래머는 특정한 클래스에서 다른 클래스에 의존하는 방법을 필요로 한다. 보통
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에서 주입에 의존하는 몇 가지 방식에 대한 모든 소개입니다. 여러분의 학습이나 업무에 어느 정도 도움이 되었으면 좋겠습니다. 의문이 있으면 댓글로 소통할 수 있습니다. 저희에 대한 지지에 감사드립니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.