[SPRING] 클래스에 데이터 소스 빈 삽입 또는 자동 와이어링
SPRING클래스에 데이터 소스 빈 삽입 또는 자동 와이어링
이것은 매우 초보자 질문일지도 모르지만, 나는 수색하고 나가 나의 이해에있는 큰 간격이 있거나 나는 나가 알아낼 수없는 무언가를 잘못하고있다.
여기 내 컨텍스트 파일에서 발췌 부분입니다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${datasource.driverClassName}" />
<property name="url" value="${datasource.url}" />
<property name="username" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
</bean>
<bean id="myBeanOne" class="a.b.c.myBeanOne">
<property name="dataSource" ref="dataSource" />
</bean>
이제 myBeanOne에서 나는 :
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource (DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void myMethod() {
String sql = "'My generic SQL update query'";
try {
this.jdbcTemplate.update(sql);
} catch (org.springframework.dao.EmptyResultDataAccessException ex) {
}
System.exit(0);
}
setDataSource가 호출 된 줄에서이 코드를 실행하려고하면이 오류가 발생합니다.
ERROR org.springframework.integration.handler.LoggingHandler
org.springframework.integration.MessageHandlingException:
java.lang.NullPointerException
줄에 : this.jdbcTemplate.update (sql);
이 작업을 수행하기 위해 10 개의 다른 구성을 시도했지만 실제로 그렇게 할 수는 없습니다. 도움이된다면 고맙습니다.
편집 : Luiggi의 의견대로 :
//in yet another classes run method
myBeanOne bOne = SomeOtherClass.create(); //just returns new myBeanOne
bOne.myMethod();
SomeOtherClass 또는이 클래스는 컨텍스트에서 Bean으로 분류되거나 컨텍스트에서 존재하지 않습니다.
나는 이것이 매우 기본적인 질문이라는 것을 알고 있지만 나는 그것에 고심하고있다.
양해 해 주셔서 감사합니다.
해결법
-
==============================
1.주석에서 언급했듯이, 문제는 여러분이 Spring 컨테이너가 그것을 생성하는 대신에 수동으로 빈을 생성한다는 것이다. 기본적으로, 당신은 이것을하고 있습니다 :
주석에서 언급했듯이, 문제는 여러분이 Spring 컨테이너가 그것을 생성하는 대신에 수동으로 빈을 생성한다는 것이다. 기본적으로, 당신은 이것을하고 있습니다 :
new MyBeanOne()
그래서 스프링 컨테이너는 여러분이 설정 한 어떤 필드도 삽입 할 수 없으므로 null입니다. jdbcTemplate 필드. 이에 대한 해결책이 몇 가지 있습니다.
@Configurable 주석을 사용하여이 문제를 처리하는 다른 방법을 찾았습니다. 이 어노테이션으로 빈을 꾸미면 필요에 따라 빈의 새로운 인스턴스를 생성 할 수 있고 Spring은 당신을 위해 스프링 관리 빈의 주입을 관리 할 것이다. 그러나 이것을 달성하기 위해, Spring은 배후에서 aspect를 사용해야하며, 프로젝트의 aspect 사용을 활성화해야한다. 설명은 꽤 길기 때문에이 솔루션에 대해 자세히 설명하는 링크를 제공합니다.
이 기능을 사용하려면 aspect를 사용하여 런타임에 클래스를 직조 할 JVM을 시작할 때 Java 에이전트를 추가해야합니다.
-
==============================
2.NPE가 실제로 해당 행에 있으면 this.jdbcTemplate은 분명히 널입니다. 이것이 사실이라면 다음 중 하나를 수행하십시오.
NPE가 실제로 해당 행에 있으면 this.jdbcTemplate은 분명히 널입니다. 이것이 사실이라면 다음 중 하나를 수행하십시오.
from https://stackoverflow.com/questions/17819752/spring-injecting-or-autowiring-datasource-bean-to-class by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring에서 모델의 객체를 표시하지 않는 JSP (0) | 2019.01.06 |
---|---|
[SPRING] Jackson의 build () 메소드가 JSON 출력을 예쁘게 출력하도록하려면 어떻게해야합니까? (0) | 2019.01.06 |
[SPRING] reg 표현식의 배열을 Spring 기반 mongo에 전달 @Query (0) | 2019.01.06 |
[SPRING] 봄 mvc 3.1 사용자 지정 RequestCondition 추가 (0) | 2019.01.06 |
[SPRING] OSGi 번들 내에서 Spring 빈을 어떻게 사용합니까? (0) | 2019.01.06 |