这是一个Spring Hibernate实现。我已经定义了一个自定义类型定义,我需要传递
我的自定义类型定义类的一个默认值,如下所示。
但价值是空的,请帮助我,我在这里缺少什么?
@TypeDef(name = "customString", typeClass = com.mydomain.EncryptString.class)
public class employee{
private String empId;
private String empName;
@Type(type="customString")
private String passportNumber;
//setter and getters
}
public class EncryptString mplements UserType{
private String password; // inject via spring configurations
@Override
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
String encryptedPassport = rs.getString(names[0]);
System.out.println(names.length);
System.out.println("##"+password); // This null ????
return ""
}
//password getters and setters methods
}
弹簧配置
<bean id="customString"
class="com.mydomain.EncryptString">
<property name="password" value="password" />
</bean>
密码密码的值在nullSafeGet()
方法中打印Null。如何制作
注射?我希望Spring会加载所有给定的默认值并实例化值
当EncryptString类通过Hibernate注释调用时。
使用调查结果更新我的问题
我看到了一个示例,其中TypeDef将spring bean id作为参数传递,如下所示。
@TypeDef(name = "encryptedString", typeClass =
org.jasypt.hibernate.type.EncryptedStringType.class, parameters = { @Parameter(name
= "encryptorRegisteredName", value = "hibernateStringEncryptor") })
Spring配置
<bean id="hibernateStringEncryptor"
class="org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor">
<property name="registeredName" value="hibernateStringEncryptor" />
<property name="password" value="password" />
<property name="saltGenerator">
<bean class="org.jasypt.salt.FixedStringSaltGenerator">
<property name="salt" value="salt"/>
</bean>
</property>
hibernateStringEncryptor配置通过类型def注入,将bean id作为
传递参数。我浏览了代码http://www.jasypt.org/download.html,但无法想象
取出注入豆子的方式。
答案 0 :(得分:0)
我认为你需要使用@Configurable
注释,因为Spring没有实例化自定义类型,Hibernate确实如此,而Spring并不知道这些实例。这是描述场景的section in the documentation。我自己没有使用过这种方法,但@Configurable
将是我尝试的第一件事。
基本上,您需要使用EncryptString
为@Configurable
类添加注释,将spring-aspect.jar
添加到项目的类路径中,将<context:spring-configured/>
添加到xml配置文件中并启用AspectJ编织。文档提供了相关的一些细节。