자바 기반 Spring 5 의 핵심 중 하나 인 IOC 용기
1)반전 을 제어 하고 생 성 대상 과 대상 의 호출 과정 을 Spring 관리 에 맡 깁 니 다.
2)결합 도 를 낮 추기 위해 IOC 를 사용 하 는 목적.
2.IOC 의 바 텀 원리
XML 해석,공장 모드,반사
IOC 사상
IOC 용기 완성 에 따라 IOC 용기 밑바닥 이 대상 공장 이다.
4.Spring 은 IOC 용 기 를 제공 하여 두 가지 방식 을 실현 합 니 다.(두 개의 인터페이스)
(1)BeanFactory:IOC 용 기 는 기본적으로 구현 되 며 Spring 내부 의 사용 인터페이스 로 개발 자 에 게 사용 되 지 않 습 니 다.
특징:프로필 을 불 러 올 때 대상 을 만 들 지 않 고 대상 을 가 져 와 서 만 듭 니 다.
(2)ApplicationContext:BeanFactory 인터페이스의 하위 인터페이스.개발 자 사용 제공
특징:프로필 을 불 러 올 때 대상 만 들 기
5.IOC 작업 의 Bean 관리
1.빈 관리 란 무엇 인가:
Bean 관 리 는 두 가지 조작 을 말 합 니 다.
Spring 생 성 대상
Spring 주입 값:수 동 주입,자동 조립
<!-- 、
bean autowire :
:byName: ,id
byType: 。
-->
<bean id="employee" class="tianfei.Spring5.autowire.Employee" autowire="byType">
<!-- -->
<!--<property name="dept" ref="dept"></property>-->
</bean>
2.IOC 작업 의 Bean 관리 두 가지 방식1)XML 기반 설정 파일 방식:
먼저 User 클래스 를 만 듭 니 다:
public class User {
private Integer id;
private String name;
public User() {
}
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
}
XML 프로필 에 User 대상 설정:
<!--1、 User
id: ,
class:
-->
<bean id="user" class="tianfei.Spring5.User">
<!--2、 set
property
name :
value :
-->
<property name="id" value="1"></property>
<property name="name" value=" "></property>
<!-- -->
<constructor-arg name="id" value="2"></constructor-arg>
<constructor-arg name="name" value=" "></constructor-arg>
<!-- p
, xml :xmlns:p="http://www.springframework.org/schema/p"
-->
<bean id="user" class="tianfei.Spring5.User" p:id="1" p:name=" "></bean>
</bean>
테스트 클래스:
public class testDemo {
@Test
public void test() {
//1、 Spring5 xml
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
//2、
User user = context.getBean("usera", User.class);
System.out.println(user);
}
}
추가:XML 프로필 에 외부 파일 도입(jdbc.properties 로)
<!-- jdbc.properties
:xmlns:context="http://www.springframework.org/schema/context"
-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
<property name="driverClassName" value="${prop.driverClassName}"></property>
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.username}"></property>
<property name="password" value="${prop.password}"></property>
</bean>
jdbc.properties 프로필 내용 은 다음 과 같 습 니 다.
prop.driverClassName=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/userdb
prop.username=root
prop.password=tianfei
2)주석 기반 방식(UserDao 인터페이스 및 실제 클래스 와 UserService 클래스 를 예 로 들 면)
public interface UserDao {
public void add();
}
@Controller(value = "userDaoImpl")
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("userdao add.......");
}
public UserDaoImpl() {
}
}
//value ,
@Service(value = "userService")
public class UserService {
//
@Value(value = "abc")
private String str;
//
// @Autowired //
// @Qualifier(value = "userDaoImpl") // Autowired
// private UserDao userDao;
// @Resource //
@Resource(name = "userDaoImpl") //
private UserDao userDao;
public void add() {
System.out.println("service add........");
userDao.add();
}
public void test() {
System.out.println("userDao = " + userDao);
System.out.println(str);
}
}
테스트 클래스:
public class test {
@Test
public void test1(){
//
// mxl :<context:component-scan base-package="tianfei.Spring5"></context:component-scan> ,
// set
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userService", UserService.class);
System.out.println(userService);
userService.add();
userService.test();
}
@Test
public void test2(){
//
// set
//
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = context.getBean("userService", UserService.class);
System.out.println(userService);
userService.add();
userService.test();
}
}
완전 주 해 를 사용 할 때 설정 클래스 로 클래스 를 만들어 야 합 니 다:
@Configuration // , xml ,
@ComponentScan(value = {"tianfei.Spring5"})
public class SpringConfig {
}
3.IOC 조작 Bean 관리(공장 Bean)Spring 에는 두 가지 Bean 이 있 습 니 다.
1)일반 Bean:설정 파일 에서 bean 형식 을 정의 하면 반환 값 형식 입 니 다.
2)공장 빈:설정 파일 에서 bean 형식 과 반환 값 형식 을 다 르 게 정의 할 수 있 습 니 다.
첫 번 째 단계:하나의 클래스 를 만 들 고 공장 bean 으로서 인터페이스 Factory Bean 을 실현 합 니 다.
두 번 째 단계:인터페이스 에서 얻 은 방법 을 실현 하고 실현 하 는 방법 에서 되 돌아 오 는 bean 유형 을 정의 합 니 다.
public class MyBean implements FactoryBean<User> {
// ( )
@Override
public User getObject() throws Exception {
return new User(1," ");
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}
MyBean.xml 파일 추가:
<!-- -->
<bean id="myBean" class="tianfei.Spring5.factorybean.MyBean"></bean>
테스트 클래스:
public class test {
@Test
public void testMyBean() {
// FactoryBean
ApplicationContext context = new ClassPathXmlApplicationContext("MyBean.xml");
Book book = context.getBean("myBean",Book.class);
System.out.println(book);
}
}
4.Bean 의 수명 주기(프로세서 추가 후 총 7 단계):(1)무 참 구조 기 를 통 해 bean 인 스 턴 스 만 들 기(무 참 구조)
(2)bean 의 속성 에 값 을 주입 하거나 다른 bean(set 방법)을 참조 합 니 다.
(3)bean 인 스 턴 스 를 bean 에 전달 한 후 프로세서 방법 post ProcessBeforeInitialization
(4)bean 의 초기 화 방법 을 호출 합 니 다(자체 설정 초기 화 방법 이 필요 합 니 다)
(5)bean 인 스 턴 스 를 bean 백 엔 드 프로세서 방법 post Process After Initialization 에 전달 합 니 다.
(6)bean 인 스 턴 스 대상 가 져 오기
(7)용기 가 닫 혔 을 때 bean 의 소각 방법 을 호출 합 니 다(자체 적 으로 소각 방법 을 설정 해 야 합 니 다)
자바 기반 의 Spring 5 의 핵심 중 하나 인 IOC 용기 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 Spring 5 의 핵심 IOC 용기 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.