gpt4 book ai didi

java - 注入(inject)时环境为空

转载 作者:行者123 更新时间:2023-12-01 11:21:45 25 4
gpt4 key购买 nike

这个问题已经被问过几次了,但它们都使用了 @Configuration 注释。对于我正在做的事情来说,这是没有必要的。我正在使用单例模式创建与数据库的连接。但是我收到以下错误:

[ERROR] com.htd.aop.logging.LoggingAspect - Exception in com.htd.web.rest.PoResource.generateJobTicket() with cause = null
java.lang.NullPointerException: null
at com.htd.config.DataSourceDAO.<init>(DataSourceDAO.java:24) ~[classes/:na]
at com.htd.config.DataSourceDAO.getInstance(DataSourceDAO.java:35) ~[classes/:na]
at com.htd.repository.PoDataSource.<init>(PoDataSource.java:12) ~[classes/:na]
at com.htd.web.rest.util.createJobTicket.<init>(createJobTicket.java:16) ~[classes/:na]
at com.htd.web.rest.PoResource.generateJobTicket(PoResource.java:339) ~[classes/:na]
at com.htd.web.rest.PoResource$$FastClassBySpringCGLIB$$cfcd338a.invoke(<generated>) ~[spring-core-4.1.6.RELEASE.jar:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) ~[spring-aop-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at com.htd.aop.logging.LoggingAspect.logAround(LoggingAspect.java:49) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_31]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_31]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_31]

该错误告诉我查看 DataSourceDAO 类的第 24 行,因为它为空。它指的是以下内容:

// Step 1: JDBC props       
String DB_URL = env.getProperty("spring.datasource.url");
String USER = env.getProperty("spring.datasource.username");
String PASS = env.getProperty("spring.datasource.password");

完整代码:

public class DataSourceDAO {

@Inject
private Environment env;

private static DataSourceDAO instance;

java.sql.Connection conn = null;
java.sql.Statement stmt = null;

// Step 1: JDBC props
String DB_URL = env.getProperty("spring.datasource.url");
String USER = env.getProperty("spring.datasource.username");
String PASS = env.getProperty("spring.datasource.password");

private DataSourceDAO() { }

public static DataSourceDAO getInstance() {

if (instance == null) {
synchronized (DataSourceDAO.class) {
if (instance == null) {
instance = new DataSourceDAO();
}
}
}
return instance;
}

public java.sql.Connection getConnection() throws ClassNotFoundException,
SQLException {

Class.forName("com.mysql.jdbc.Driver");

if (conn == null) {

conn = DriverManager.getConnection(DB_URL, USER, PASS);

}

return conn;
}
}

我不知道为什么它会是空的。 @Inject 应该可以正常工作,至少我是这么认为的。

最佳答案

首先,您不会在手动实例化的类中注入(inject)任何内容。

修复了类的手动初始化后,您应该注意,在构造函数内,您将无法使用注入(inject)的属性,它们都是在实例化后设置的。

如果您想在实例化对象后执行某些行为,则应使用 @PostConstruct 回调 ( http://www.mkyong.com/spring/spring-postconstruct-and-predestroy-example/ )

关于java - 注入(inject)时环境为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com