我的实体类中有几个@Value注释。我不确定为什么,但他们都返回null。我也有" ShaPasswordEncoder"对象自动装配,也是抛出NullPointer异常。我不知道为什么。请指教。
@Repository
@Configurable
@Entity
@Table(name="user")
@NamedQueries({...})
public class User implements Serializable{
@Transient private static final Logger logger = Logger.getLogger(User.class);
@Transient private static final AppUtil appUtil = new AppUtil();
@Transient @Value("some value") private String extDir;
@Transient @Value("100x100") private String imageSize;
@Transient private static byte[] salt = "FBar".getBytes();
@Transient @Autowired private ShaPasswordEncoder passwordEncoder;
....
//Default Constructor
public User(){
logger.info("TEST IMAGE => "+imageSize);
}
public String passwordEncoder(String password) {
return passwordEncoder.encodePassword(password,salt);
}
答案 0 :(得分:1)
将JPA实体作为Spring bean是一个糟糕的设计。 你应该保持你的实体简单:只有getter和setter。
// Only JPA annotations
@Entity
@Table(name="user")
@NamedQueries({...})
public class User {
// Getters & Setters
}
然后,您应该将业务逻辑委派给服务类:
@Service
public class UserService {
@Autowired
private ShaPasswordEncoder passwordEncoder;
@Value("${conf.extDir}")
private String dir;
// Some operations ...
public void createUser(User user) {
// ...
}
public void updateUser(User user) {
// ...
}
}
答案 1 :(得分:0)
您是否传递了有效的值表达式?对于属性占位符,您可以使用以下内容:
@Value("${directory.extDirectory}")
您还可以使用Spring {#{value}
check the docs here
如果找不到属性,也可以指定默认值
@Value("${directory.extDirectory:defaultValue}")
答案 2 :(得分:0)
在POJO上使用Spring注释意味着您将此bean的创建和配置委托给Spring IoC容器! Spring容器将提供所有必需的依赖项。
例如:
@Component
public class MyBean {
@Value("${data}")
private String data;
@Autowired
private MyService service;
// ...
}
MyBean bean = new MyBean();
MyBean bean =(MyBean)applicationContext.getBean(MyBean.class);
或者
@Component
public class AnotherBean {
// You are sure that Spring will create and inject the bean for you.
@Autowired
private MyBean bean;
}
答案 3 :(得分:0)
虽然bean是由Spring管理的,但你也可以自己创建一个新的bean,而不是从spring容器中获取它。
因此,下面的代码将创建一个新用户,但它不是来自Spring上下文。
User user = new User()
如果使用上面的代码,则@value
不会应用于您的bean。
如果你想要,你必须通过@Autowired
从Spring获得用户public class SampleService{
@Autowired
private User user;
public void Sample(){
user.getExtDir(); //here user.extDir is not null
}
}