2024. 2. 8. 17:57ㆍDaily Codig Reminder
@Autowired
coc
String username;
int age;
//***************************************************************//
@Autowired //기본생성자 자동주입 기본은 (required=ture)
Cat cat; //COC의 개념 , 생성된 bean이 여러개인 경우 변수명과 같은 id의 빈을 자동 주입
//***************************************************************//
/*
* public void setCat(Cat cat) {
* System.out.println("Person.setCat함수호출()========"); this.cat = cat; }
*/
<context:annotation-config></context:annotation-config>
<bean id="cat" class="com.spring.Cat"><!-- cat == Person의 멤버변수 @Autowired cat -->
<constructor-arg name="catAge" value="10"></constructor-arg>
<constructor-arg name="catName" value="뭉크"></constructor-arg>
</bean>
<bean id="pet01" class="com.spring.Cat">
<constructor-arg name="catAge" value="20"></constructor-arg>
<constructor-arg name="catName" value="야옹이"></constructor-arg>
</bean>
<bean id="onePerson" class="com.spring.Person">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
<!-- <property name="cat" ref="pet01"></property> -->
</bean>
@Qualifier
<context:annotation-config></context:annotation-config>
<bean class="com.spring.Cat" id ="pet01" >
<constructor-arg name="catName" value="야옹이"></constructor-arg>
<constructor-arg name="catAge" value="20"></constructor-arg>
</bean>
<bean class="com.spring.Cat" id ="pet02" >
<constructor-arg name="catName" value="쿵크"></constructor-arg>
<constructor-arg name="catAge" value="10"></constructor-arg>
</bean>
<bean class="com.spring.Person" id="person">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
</bean>
String username;
int age;
@Autowired //기본생성자 자동주입 기본은 (required=ture)
@Qualifier("pet01") //autowired와 같이 사용, 특정 bean id지정
// @Qualifier(value = "pet01") //특정 bean id지정
Cat cat; //COC의 개념 , 생성된 bean이 여러개인 경우 변수명이 같은 ref를 주입
//***************************************************************//
/*
출력문
2.xml에서 빈 생성 , 생성 빈 사용 방법=========
기본생성자 호출=================
com.spring.Person@332796d3
@Resource
dependency
<!-- dependency 추가시작 부분 -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
@Resource
@Resource //set함수를 통해 하나의 객체를 주입받음, 여러개 객체의 경우 에러
Cat cat;
<bean id="aa" class="com.spring.Cat">
<constructor-arg name="catAge" value="20"></constructor-arg>
<constructor-arg name="catName" value="야옹이"></constructor-arg>
</bean>
<!-- Cat객체가 하나인 경우 하나를 주입 받음, 여러개인 경우 에러가 남 -->
<!-- <bean id="pet02" class="com.spring.Cat">
<constructor-arg name="catAge" value="10"></constructor-arg>
<constructor-arg name="catName" value="뭉크"></constructor-arg>
</bean> -->
<bean id="onePerson" class="com.spring.Person">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
<!-- <property name="cat" ref="pet01"></property> -->
</bean>
cat bean 주입 하지 않아도 @Resource 로 주입 가능
출력문
2.xml에서 빈 생성 , 생성 빈 사용 방법=========
기본생성자 호출=================
com.spring.Person@5ce8d869
name
@Resource(name = "pet02") //bean id=pet02이용 @Autowire @Qualifire("pet02")
//여러개 중 bean의 id 지정 주입
Cat cat;
<!-- 주의 annotation사용시 context:annotation-config필요함 -->
<context:annotation-config></context:annotation-config>
<bean id="pet01" class="com.spring.Cat"><!-- cat == Person의 멤버변수 @Autowired cat -->
<constructor-arg name="catAge" value="20"></constructor-arg>
<constructor-arg name="catName" value="야옹이"></constructor-arg>
</bean>
<bean id="pet02" class="com.spring.Cat">
<constructor-arg name="catAge" value="10"></constructor-arg>
<constructor-arg name="catName" value="뭉크"></constructor-arg>
</bean>
<bean id="onePerson" class="com.spring.Person">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
<!-- <property name="cat" ref="pet01"></property> -->
</bean>
property name : pet01로 주입
COC
@Resource //Coc개념사용
Cat cat;
<context:annotation-config></context:annotation-config>
<bean id="cat" class="com.spring.Cat"><!-- CoC 동일한 id= 멤버변수-->
<constructor-arg name="catAge" value="20"></constructor-arg>
<constructor-arg name="catName" value="야옹이"></constructor-arg>
</bean>
<bean id="pet02" class="com.spring.Cat">
<constructor-arg name="catAge" value="10"></constructor-arg>
<constructor-arg name="catName" value="뭉크"></constructor-arg>
</bean>
<bean id="onePerson" class="com.spring.Person">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
<!-- <property name="cat" ref="pet01"></property> -->
</bean>
method
Cat cat;
//Cat cat1;
//***************************************************************//
@Resource //@Resource위치가 set함수에 사용됨
//함수이름을 setPet으로 변경하고 id="pet"을 사용하게 됨
<context:annotation-config></context:annotation-config>
<bean id="pet" class="com.spring.Cat"><!-- CoC 동일한 id= 멤버변수-->
<constructor-arg name="catAge" value="20"></constructor-arg>
<constructor-arg name="catName" value="야옹이"></constructor-arg>
</bean>
<bean id="pet02" class="com.spring.Cat">
<constructor-arg name="catAge" value="10"></constructor-arg>
<constructor-arg name="catName" value="뭉크"></constructor-arg>
</bean>
<bean id="onePerson" class="com.spring.Person">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
<!-- <property name="cat" ref="pet01"></property> -->
</bean>
@Autowired_resource
main
GenericXmlApplicationContext ctx=
new GenericXmlApplicationContext("classpath:com/config/config.xml");
DeptService service= ctx.getBean("deptService",DeptService.class);
List<String> list= service.getList();
for (String s : list) {
System.out.println(s);
}
dao
public List<String> getList() {
// TODO Auto-generated method stub
return Arrays.asList("A","B","C");
service
@Resource(name="ddd")/////////////////////////////////////// byname
DeptDAO dao;
public DeptDAO getDao() {
return dao;
}
public void setDao(DeptDAO dao) {
this.dao = dao;
}
public DeptService() {
//dao= new DeptDAO();
}
public List<String> getList(){
return dao.getList();
}
bean
<context:annotation-config></context:annotation-config>
<!-- annotation지정을 위해 필수 -->
<bean id="ddd" class="com.dao.DeptDAO"></bean>
<bean id="deptService" class="com.service.DeptService"></bean><!-- dao자동주입 -->
@Value, SpEL
jdbc.properties 4가지 정보
user.oracle = 드라이버 정보
user.id =sccot
//기존방법
bean
<context:annotation-config></context:annotation-config>
<bean class="com.spring.Person" id="person"></bean>
</beans>
person.java
@Value("홍길동") //peoperty name ="username" value ="홍길동
String username;
@Value("10")
int age;
출력:
Person [username=홍길동, age=10]
<context:annotation-config></context:annotation-config>
<context:property-placeholder location="classpath:com/spring/test.properties"/>
<bean class="com.spring.Person" id="person">
<property name="username" value="${value.name}"></property>
<property name="age" value="${value.age}"></property>
</bean>
properties
value.name=\uD64D\uAE38\uB3D9
value.age=20
출력:
Person [username=홍길동, age=10]
@Value("#{yyy.username}") //peoperty name ="username" value ="홍길동
String username;
@Value("#{yyy.age}")
int age;
bean
<context:annotation-config></context:annotation-config>
<bean class="com.spring.Person" id="yyy">
<constructor-arg name="username" value="홍길동"></constructor-arg>
<constructor-arg name="age" value="10"></constructor-arg>
</bean>
<bean class="com.spring.Person" id="xxx">
</bean>
</beans>
이거도 됨
@Value("${value.name}") //peoperty name ="username" value ="홍길동
String username;
@Value("${value.age}")
int age;
<context:annotation-config></context:annotation-config>
<bean class="com.spring.Person" id="yyy">
<constructor-arg name="username" value="홍길동"></constructor-arg>
<constructor-arg name="age" value="10"></constructor-arg>
</bean>
<bean class="com.spring.Person" id="xxx">
<property name="username" value="#{yyy.username}"></property>
<property name="age" value="#{yyy.age}"></property>
</bean>
// @Value("${yyy.name}")
//peoperty name ="username"
value ="홍길동
String username;
// @Value("${yyy.age}")
<context:annotation-config></context:annotation-config>
<bean class="com.spring.Person" id="xxx">
<property name="username" value="#{'이순신'}"></property>
<property name="age" value="#{44+1}"></property>
<property name="married" value="#{not (3>2)}"></property>
<property name="weight" value="#{72.6}"></property>
</bean>
<bean class="com.spring.Person" id="xxx2">
<property name="username" value="홍길동"></property>
<property name="age" value="20"></property>
<property name="married" value="false"></property>
<property name="weight" value="72.4"></property>
</bean>
Person [username=홍길동, age=20, isMarried=false, weight=72.4]
<bean class="com.spring.Person" id="onePerson">
<property name="username" value="홍길동"></property>
<property name="age" value="10"></property>
<!-- value="#{pet01}" == ref="pet01"-->
<property name="cat" value="#{pet01}"></property>
</bean>
<bean id="xxx" class="com.spring.Person">
<property name="username" value="유관순"></property>
</bean>
<bean class="com.spring.Person" id="onePerson">
<property name="username" value="#{xxx.username}"></property>
<property name="age" value="10"></property>
<property name="cat" value="#{pet01}"></property>
</bean>
Person [username=유관순, age=10, cat=Cat [catName=야옹이, catAge=10]]
<property name="username" value="#{xxx.getXXX()}"></property>
public String getXXX() {
return this.getUsername();
}
Person [username=유관순, age=10, cat=Cat [catName=야옹이, catAge=10]]
bean 자동생성
<!-- context check
클래스에 달린 @Componenet 를 자동으로 bean 생성함
annotaion-config 포함됨
com.sercice 패키지 기분 하위패키지 검색-->
<context:component-scan base-package="com.service"/>
</beans>
@Component 로 bean 생성
//@Component // id -> deptService
@Component("test")
public class DeptService { // id -> deptService
public DeptService () {
System.out.println("DeptService 기본생성자 호츨");
}
public String getService() {
return "DeptService.getService() 호출됨";
}
Test.java
ApplicationContext ctx = new
GenericXmlApplicationContext("classpath:com/spring/config.xml");
DeptService service = ctx.getBean("test", DeptService.class);
System.out.println(service);
System.out.println(service.getService());
DeptService2 service2 = ctx.getBean("xxx", DeptService2.class);//id 지정안하면 위랑 똑같이 나옴
System.out.println(service2);
System.out.println(service2.getService());
DeptService 기본생성자 호츨
DeptService 기본생성자 호츨
com.service.DeptService@e57b96d
DeptService.getService() 호출됨
com.service.DeptService2@32c726ee
DeptService.getService() 호출됨
bean
<context:component-scan base-package="com.*"/>
</beans>
Test
ApplicationContext ctx = new
GenericXmlApplicationContext("classpath:com/spring/config.xml");
DeptDAO dao = ctx.getBean("dao", DeptDAO.class);
System.out.println(dao.getInfo());
DeptService service = ctx.getBean("deptService", DeptService.class);
System.out.println(service.getInfo());
}
dao↓
@Repository("dao")
public class DeptDAO {
public DeptDTO getInfo() {
return new DeptDTO(100, "관리", "서울");
}
public DeptDAO() {
super();
System.out.println("dao 기본생성자");
}
service ↓
@Service
@Scope(value="singleton")
public class DeptService { // id -> deptService
@Autowired
DeptDAO dao;
public DeptDAO getDao() {
return dao;
}
public void setDao(DeptDAO dao) {
this.dao = dao;
}
public DeptService() {
System.out.println("Service 기본생성자");
}
public DeptDTO getInfo() {
return dao.getInfo();
}
dao 기본생성자
Service 기본생성자
DeptDTO [deptno=100, dname=관리, loc=서울]
DeptDTO [deptno=100, dname=관리, loc=서울]
<context:component-scan base-package="com.*"/>
<bean id="echoBean" class="com.bean.EchoBean">
<property name="one" ref="xxx"> </property>
<property name="two" ref="twoService"></property>
</bean>
oneservice
@Service("xxx")
public class OneService { // id -> deptService
public void one () {
System.out.println("OneService");
}
twoService
@Service
public class TwoService { // id -> deptService
public void two () {
System.out.println("TwoService");
}
bean 생성안하고 주소 뽑기
<context:component-scan base-package="com.*"/>
@Component
public class EchoBean {
@Autowired
OneService one;
@Autowired
TwoService two;
public OneService getOne() {
return one;
}
public void setOne(OneService one) {
this.one = one;
}
public TwoService getTwo() {
return two;
}
public void setTwo(TwoService two) {
this.two = two;
}
lifecycle
package com.dto;
//@Alias("별칭")
public class Student {
private String name;
private int age;
public void getInfo() {
System.out.println("getInfo==========");
}
public void aaa() {
System.out.println("init-method.aaa");
}
public void bbb () {
System.out.println("destroy -method.bbb");
}
public Student() {
System.out.println("기본생성자 호출");
}
}
Test -제너릭 써야함
GenericXmlApplicationContext ctx = new
GenericXmlApplicationContext("classpath:com/spring/echo.xml");
Student student = ctx.getBean("aaa", Student.class);
System.out.println(student);
student.getInfo();
ctx.close();
}
bean
<bean class="com.dto.Student" id="aaa" init-method="aaa" destroy-method="bbb"></bean>
기본생성자 호출
init-method.aaa
com.dto.Student@3f9342d4
getInfo==========
destroy -method.bbb
bean
<bean class="com.dto.Student" ></bean>
package com.dto;
//@Alias("별칭")
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class Student implements InitializingBean, DisposableBean {
private String name;
private int age;
public void getInfo() {
System.out.println("getInfo==========");
}
//public void aaa() {
// System.out.println("init-method.aaa");
//}
//public void bbb () {
// System.out.println("destroy -method.bbb");
//}
public Student() {
System.out.println("기본생성자 호출");
}
@Override
public void destroy() throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
}
}
기본생성자 호출
com.dto.Student@4b40f651
getInfo==========
annotation 쓰기 위해 dependency 추가
<context:annotation-config></context:annotation-config>
<bean class="com.dto.Student" id="stu" ></bean>
<!-- 클래스에서 직접 구현 -->
</beans>
package com.dto;
//@Alias("별칭")
import javax.annotation.PostConstruct;
public class Student {
private String name;
private int age;
public void getInfo() {
System.out.println("getInfo==========");
}
@PostConstruct
public void aaa() {
System.out.println("init-method.aaa");
}
@PostConstruct
public void bbb () {
System.out.println("destroy -method.bbb");
}
public Student() {
System.out.println("기본생성자 호출");
}
}
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
'Daily Codig Reminder' 카테고리의 다른 글
mybatis (1) | 2024.02.12 |
---|---|
spring- jdbc (1) | 2024.02.08 |
props, autowired (1) | 2024.02.07 |
spring - property (1) | 2024.02.06 |
스프링 준비 (0) | 2024.02.05 |