Java 如何将Spring值注入Hibernate类型定义类
这是一个Spring Hibernate实现。我已经定义了一个需要传递的自定义类型定义 自定义类型定义类的一个默认值如下所示 但是这个值是空的,请帮助我这里缺少什么Java 如何将Spring值注入Hibernate类型定义类,java,spring,hibernate,Java,Spring,Hibernate,这是一个Spring Hibernate实现。我已经定义了一个需要传递的自定义类型定义 自定义类型定义类的一个默认值如下所示 但是这个值是空的,请帮助我这里缺少什么 @TypeDef(name = "customString", typeClass = com.mydomain.EncryptString.class) public class employee{ private String empId; private String empName; @Type(t
@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>
弹簧配置为
<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作为
参数。我看了一遍密码,但还是不明白
注入bean的方式。我认为您需要使用
@Configurable
注释,因为Spring不实例化自定义类型,Hibernate不实例化,Spring也不知道这些实例。这是描述该场景的示例。我自己还没有使用过这种方法,但是@Configurable
将是我尝试的第一件事
基本上,您需要使用
@Configurable
注释EncryptString
类,将spring aspect.jar
添加到项目的类路径中,将
添加到xml配置文件中,并启用AspectJ编织。文档中提供了一些关于这方面的详细信息。您实际上想做什么,需要将其注入到EncryptString中?也许有更好的方法来实现您的目标,但您的示例并不能很好地表达您的意图—这只是一个假设的业务场景。请只考虑技术要求。谢谢。请在用调查结果标题更新我的问题后参考问题单。有没有一种方法可以传递bean id一个Type def参数并注入它。这是有效的。在反编译时,jasypt jar无法找出这种情况发生的方式。但它是有效的。你在那里添加的内容与你最初要求的内容不同。您正在使用一个新的框架。我查看了代码,我认为它们实际上并没有进行注入:HibernatePBEStringEncryptor的字段中填充了注入,但是EncryptedStringType
所发生的事情不是Spring注入。当从Spring调用setRegisteredName()
时(在xml配置文件中)创建了一个HibernatePBEEncryptorRegistry
的单例实例,Spring创建的实例被“注册”如果您查看nullSafeGet
或nullSafeSet
何时调用同一个单例HibernatePBEEncryptorRegistry
,并使用之前注册(未注入)的加密程序--HibernatePBEStringEncryptor
,则是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>