Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Spring值注入Hibernate类型定义类_Java_Spring_Hibernate - Fatal编程技术网

Java 如何将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

这是一个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>
弹簧配置为

 <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>