본문 바로가기

spring/Annotation

@ComponentScan 스프링 설정파일에서 와 같이 component scan을 하게 된다. Class에서 다른 Class 타입의 객체를 사용하기 위해서 사용한다. :@ComponentScan("package.pack2")public class Pack1Class{: Pack1Class class에서 package.pack2 패키지의 component 객체를 참조하기 위해서 어노테이션으로 scan한다. xml 설정파일에서 scan하던 일을 어노테이션으로 처리한 것이다. 이경우 xml 설정파일에서 scan하지 않아도 된다. 더보기
@Scope - @Component 옵션 만약 은행업무에서 하나의 객체만을 가지고 실행되는 싱글톤패턴을 사용한다면 모든 사람이 하나의 객체만 가지고 은행업무를 보게되면 여러명의 사람이 하나의 계좌를 사용하는 꼴이 될 것이다. 그렇기 때문에 싱글톤을 사용하지 않는 방법으로 로직을 구현해야하는데 이때 @Scope를 사용하면 싱글톤을 사용하지 않을 수 있다. 스프링의 @Component의 scope를 설정하기 위한 어노테이션으로 명시하지 않을때 설정되는 scope의 기본값은 singleton 이다. 싱글톤을 하지 않기 위해서는 @Component 어노테이션 아래 @Scope("prototype") 으로 명시해 주면된다. 더보기
@Value, Spring EL @Value변수에 값을 초기화하기 위해 사용한다. @Value("#{dataInfo.name}") // Spring EL : #{표현식}, 만들어진 Component 객체를 이용,private는 getter를 이용해서 가져옴private String name; datainfo객체의 name 변수에 접근한 것. datainfo는 스프링이 만들어둔 객체.(설정파일에서든지 @Component 어노테이션에서든지 만든 객체) 기본적으로 @Value에 들어가는 값의 type은 String 이다. 하지만 변수 타입에 맞춰져서 알맞게 들어간다. @Value("30")private int age;@Value("1,2,3,4")//배열 처리private int arr[]; 메서드 안의 인자 안에서도 사용 가능하다. 더보기
@Resource @Resource는 @Autowired와 같이 property injection을 위한 어노테이션이다. 차이점은 @Autowired는 객체 타입을 보고 맵핑 된다면 @Resource는 객체 name(id)를 보고 맵핑이 된다. @Resource() 괄호에 객체 name을 명시하지 않으면 @Autowired 처럼 해당 레퍼런스변수의 타입과 똑같은 객체 name을 찾는다. @Resource(name="testClass") 라고 별도로 명시 한다면 해당 name을 가진 class와 맵핑한다. 다시 말해서 설정파일의 bean태그에 설정된 id(name도 가능)를 찾아서 맵핑 혹은 @Componentpublic class TestClass{} @Component("testClass")public class Tes.. 더보기
어노 테이션을 사용하기 위한 설정 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-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">    context:component-scan base-pa.. 더보기
@component : @Service,@Repository,@Controller 스프링 설정 파일에서 아래와 같이 객체를 생성할수 있다. 하지만 위와 같은 방법 보다는 아래와 같이 자바에서 어노테이션을 사용하기도 하며 더 편하다. 실무에서도 더 많이 사용되는 방법이다. :@Service()public class SenderProcess {: @Service 대신 @Component 어노테이션을 사용해도 되지만 가독성을 위해서(무슨 행위를 위한 클래스인지 구별하기 위해서) @Service나 @Repository 어노테이션을 사용해줌 물론 @Component 어노테이션을 사용해도 상관없다. 이렇게 생성하게 되면 궁금해지는 점이 하나있다. 설정파일에서 직접 명시해 줬던 id가 어노테이션을 사용하면 어떻게 설정되는가? 이다. 직접 설정하기 위해서 @Service() 의 괄호안에 직접 명시해.. 더보기
@Autowired @Autowired는 property injection을 위한 어노테이션이다. 스프링 설정파일에서 변수에 데이터나 객체를 주입해 주기 위한 태그를 대신해주는 어노테이션이라 할 수 있다. 태그는 해당 변수의 setter를 이용하여 속성 주입(property injection)을 한다면 autowired는 setter메소드에 사용해도 되고 변수에 직접 사용해도 된다. 예를 들어 아래와 같이 해줘도 되지만 private Sender sender; @Autowiredpublic void setkbs(Sender sender) {//Autowired로 설정할 메소드 이름은 중요하지 않다.this.sender = sender;} 아래와 같은 경우도 가능하며 더 간편하다. 실제로 권장하는 방법 @Autowiredpr.. 더보기
@Required 얘 대신 아래 context 를 써도 됨(물론 namespace에 context가 추가 되어 있어야함 자바에서는 @Required 어노테이션을 사용해서 해당 setter의 property 값을 무조건 줘야함을 명시한다. @Requiredpublic void setRequired(int required) {this.required = required;} 참고 : 설정은 어노테이션을 사용하겠다는 설정이며 @Required 어노테이션에만 해당되는 것이 아닌 모든 어노테이션에 해당되는 설정이다. 더보기