2013-08-12 1 views
0

나는 Spring 3를 사용하여 간단한 설정을한다.Spring ApllicationContext instanciation 피하기

<bean id="propertyBean" class="com.myapp.PropertyBean"> 
    <property name="rootDirLogPath" value="C:\Users\dede" /> 
</bean> 

나는이 XML과 일치하고 내가 주입 값이 빈을 사용하려는 콩을 가지고

나는 그렇게 PropertyBeans.xml라는 XML 파일이 있습니다. 이 위대한 작품을

ApplicationContext context = new ClassPathXmlApplicationContext("AppPropertyBeans.xml"); 
PropertyBean obj = (PropertyBean) context.getBean("propertyBean"); 
String rootDirLogPath = obj.getRootDirLogPath(); 

하지만 난 빈을 사용할 각시의 ApplicationContext의 인스턴스를 방지 할 수있는 방법이 있는지 알고 싶어 : 사실은 내가 가지고있다. BeanFactory에 대해 들었습니다. 좋은 생각입니까? 다른 솔루션은 무엇입니까?

다른 말로하면 : 봄 MVC의 모든 컨트롤러에서이 응용 프로그램 컨텍스트 인스턴스를 호출해야합니까?

+0

나는 스프링을 철저히 읽어야한다고 생각한다. – user2550754

답변

4

당신은 applicationContext.xml에 줄을 추가 컨트롤러 봄 콩을 사용하고자하는 경우 다음 방법으로 다음과 같은 컨트롤러를 쓰기

<context:spring-configured/> 
<task:annotation-driven/> 
<context:component-scan base-package="by" /> 

을 :

@Controller 
public class IndexController { 

    @Autowired 
    private UserService userService; 

    @Autowired 
    private GroupService groupService; 

     // methods with @RequestMapping annotation 
} 

이 사소한 일이, 그래서 만약 당신이 "Spring in action book", 7 장 : 웹 응용 프로그램 구축

+0

이것이 내가 누락 된 이유입니다. – Ceddoc

0

ApplicationContext의 전체 개념은 하나 (따라서 응용 프로그램의 이름, 컨텍스트)라는 것입니다.

그래서 매번 새로운 것을 만들면 잘못하고있는 것입니다.

의존성 주입을 제대로 사용하면 해당 코드를 포함하는 객체가 이미 주입 컨테이너 (Spring)에 의해 인스턴스화되고 propertyBean이 주입됩니다.

+0

좋아, 그 이유는 내가 여기에, 내가 아는 응용 프로그램 instanciating 때마다 좋은 해결책이 아니라 봄 피하는 방법? 어떤 예가'@ autowired'와 함께 있습니까? – Ceddoc

0

당신은 단순히 같은 클래스의 구성원으로 컨텍스트를 추가 할 수 있습니다

private ApplicationContext context; 

생성자 또는 초기화() 메소드에서 그것을 실체화.

+0

글쎄, 알았지 만 애플리케이션 컨텍스트는이를 사용하는 클래스의 각각의 새로운 인스턴스와 함께 인스턴스화 될 것이다. Joeri Hendrickx가 모두 지적한 것처럼 – Ceddoc

+0

DI의 주된 의도는 모든 것이 한 곳에 있다는 것입니다. 사령관처럼. 만약 당신이 원하는 곳이라면 MainClass에서 static 최종 멤버로 구현할 기회가 생길 수도 있습니다. 그것은 꽤 아니지만 당신을 위해 일할 수도 있습니다. – Xondio

0

autowiring을 사용하거나 InitializingBean 인터페이스를 구현하십시오.

+0

autowiring을해도 주 방법으로 수행되는 주먹 동작은 Application context instanciation입니다. 다른 말로하면, 내 질문은 MVC 컨트롤러에서이 작업을 수행하는 방법입니다. – Ceddoc