✅ pojo 클래스
으로 Bean
등록하기
<beans:bean>
태그를 이용해서 등록id
: context 내에서 사용하는 bean 이름class
: 대상이되는 클래스지정(패키지명.클래스명) // servlet-context.xml 파일
// Animal 클래스를 default 생성자로 생성해서 bean으로 등록
<beans:bean id="bbo" class="com.bs.spring.beantest.Animal"/> // xml파일로 클래스 등록하는 방법
// pojo생성시 setter를 이용해서 데이터를 넣어서 생성시키기 -->
<beans:bean id="bbo" class="com.bs.spring.beantest.Animal">
<beans:property name="name" value="뽀숑"/> // name 필드를 뽀숑이로
<beans:property name="age" value="3"/> // age 필드를 3으로
<beans:property name="height" value="50.4"/> // height 필드르 50.4로
</beans:bean>
// 매개변수있는 생성자를 이용해서 생성시키기
// 두개만 넣을경우, 해당 클래스에서 그 타입과 개수에 해당하는 매개변수 있는 생성자를 생성해야함
<beans:bean id="bbo" class="com.bs.spring.beantest.Animal">
<beans:constructor-arg index="0" value="뽀숑"/> // 0번 : 이름
<beans:constructor-arg index="1" value="3"/> // 1번 : 나이
<beans:constructor-arg index="2" value="50.4"/> // 2번 : 키
</beans:bean>
<beans:bean id="dog" class="com.bs.spring.beantest.Animal">
<beans:property name="name" value="뽀삐"/>
</beans:bean>
<beans:bean id="emp" class="com.bs.spring.beantest.Employee"
init-method="initialMethod" destroy-method="destroyMethod">
// 생성될때 실행시킬메소드 , 소멸될때 실행시킬 메소드
<beans:property name="name" value="최주영"/>
<beans:property name="age" value="24"/>
<beans:property name="address" value="경기도 안양시"/>
<beans:property name="salary" value="100"/>
<beans:property name="dept" ref="dept"/>
</beans:bean>
<beans:bean id="emp2" class="com.bs.spring.beantest.Employee">
<beans:constructor-arg index="0" ref="dept"/>
</beans:bean>
// 등록하는 bean이 다른 클래스와 연관관계(참조)가 설정되어 있을때는
// 다른 bean을 등록해야한다. ref 속성을 이용해서 설정한다.
@Controller // 스프링 빈으로 등록
public class HomController {
// springbean으로 등록된 객체는 필드로 가져와 사용할 수 있음
// 타입을 찾아서 집어넣음
// 문제점 : Animal 타입이 두개이면 NoUniqueBean 예외 발생
// 해결방법 (1) : 동일한 타입이면, 필드명과 Id값을 비교해서 찾음
// 해결방법 (2) : @Qualifier 어노테이션을 이용해서 특정 bean을 선택
@Autowired
// 중복된 타입이 있는 경우 @Qualifier 어노테이션을 이용해서 특정 bean을 선택할 수 있음
@Qualifier("dog")
private Animal a;
@Autowired
@Qualifier("bbo")
private Animal b;
//springBean으로 등록되지않은 객체를 Autowired 하면?
// 오류 발생! -> 등록되지은 bean은 Autowired 하지못함
@Autowired(required = false)
// required = false -> 빈에 있으면 넣고 빈에 없으면 넣지말라는 뜻 (오류발생 x)
// 많이 사용하는 방식은 아님
private Employee emp;
@Autowired
private Employee emp2;
// Employee 클래스
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Employee {
private String name;
private int age;
private String address;
private int salary;
private Department dept;
public Employee(Department dept) {
this.dept=dept;
}
public void initialMethod() {
System.out.println(this.getClass().getName()+"클래스생성했다!");
}
public void destroyMethod() {
System.out.println("객체 으악!");
}
}
✅ 클래스
방식으로 Bean
등록
configuration
으로 사용할 수 있음@Configuration
public class BeanTestConfiguration {
// springbeanconfiguration.xml과 동일한 기능
// spring에서 사용할 bean을 자바코드로 등록할 수 있다
// @Bean 어노테이션을 이용
// 메소드선언을 통해 등록함
@Bean
@Order(1) // Order을 통해 bean의 우선순위를 설정할 수 있다
public Animal ani() { // 메소드명이 id가되고 반환형은 Animal임
return Animal.builder()
.name("킥킥")
.age(5)
.height(80)
.build();
}
@Bean
// 등록된 bean에 특정 id값 부여하기
@Qualifier("sol") // Qualifier 등록시 id값은 sol이됨
public Employee getEmployee(@Qualifier("sal") Department d) {
// 메소드명이 id가되고 반환형은 Employee임
// @Qualifier("sal") 로 지정
// 매개변수로만 선언하면, 밑에있는 sal과 Department bean이 겹치기때문에
// 의존성 주입을 해줌
return Employee.builder()
.name("최솔")
.age(27)
.address("경기도 안양시")
.salary(200)
.dept(d)
.build();
}
@Bean
public Department sal() {
return Department.builder()
.deptCode(2L)
.deptTitle("영업부")
.deptLocation("서울")
.build();
}
@Bean
public BasicDataSource getDateSource() {
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("oracle.jdbc.driver.OracleDriver");
source.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
source.setUsername("spring");
source.setPassword("spring");
return source;
}
/*
* @Bean public Gson gson() { return new Gson(); }
*/
}
@Controller // 스프링 빈으로 등록
public class HomController {
// java로 등록한 bean 가져오기
@Autowired
@Qualifier("ani")
private Animal c;
@Autowired
@Qualifier("sol")
private Employee sol;
@Autowired
List<Animal> animals;
@Autowired
private TargetComponent tc;
// @어노테이션으로 bean 등록
@Autowired
private FuntionalTest ft;
// basepackage 외부에 있는 @Component
@Autowired
private Test test;
@RequestMapping("/test")
public String home() { // home() 메소드는 서블릿의 do get 역할을함
System.out.println(a);
System.out.println(b);
System.out.println(emp);
System.out.println(emp2);
System.out.println(c);
System.out.println(sol);
animals.forEach(System.out::println);
System.out.println(tc);
System.out.println("functionalTest출력");
System.out.println(ft);
System.out.println(ft.getA());
// spring에서 파일을 불러올 수 있는 Resource 객체를 제공
Resource resource = new ClassPathResource("mydata.properties");
try {
Properties prop = PropertiesLoaderUtils.loadProperties(resource);
System.out.println(prop);
resource = new FileSystemResource("D:\\springwork\\spring\\src\\main\\resources\\test.txt");
Files.lines(Paths.get(resource.getURI()),Charset.forName("UTF-8")).forEach(System.out::println);
}catch(IOException e) {
e.printStackTrace();
}
return "index";
}
}
✅ 모든 부분에 인코딩 필터 적용
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
<!--
인코딩필터 등록하기
spring이 encodingFilter클래스를 제공함
-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 모든부분에 encoding 처리함 -->
</filter-mapping>
</web-app>