如何在Hibernate UserType对象中注入bean?

时间:2013-06-25 12:13:43

标签: spring hibernate dependency-injection singleton usertype

我需要将DB中的一些实体字段保存为JSON。 最喜欢的解决方案是定义自定义的hibernate UserType。

JSON转换器(Jackson)doc建议将其用作单例,但hibernate本身会创建自定义UserType对象。 如何在我的自定义Hibernate UserType对象中注入spring定义的JSON转换器bean?

1 个答案:

答案 0 :(得分:0)

解决方案可能正在使用@Configurable,因此您可以自动装配属性对象,即使这不是指向它们的弹簧容器。

请参阅spring文档:http://static.springsource.org/spring/docs/3.2.3.RELEASE/spring-framework-reference/html/aop.html#aop-atconfigurable

代码示例:

@Configurable
public class CSessionImpl implements CSessionOperations {


    private Touriste touriste;

    @Inject
    private Office office;

    @Inject
    private OTmanager manager;

    @Inject private ScheduledExecutorService executorService;

    private ScheduledFuture<Void> schedule;

    @PostConstruct
    private void replanifierMiseHorsLigne(){
        if(schedule != null){
            schedule.cancel(false);
        }
        schedule = executorService.schedule(new Callable<Void>() {
            @Override
            public Void call() t

在CSessionImpl中看到这个例子。&lt; INIT&GT;将与@Inject调用attribut将被连线。

你需要添加beans.xml:

<context:spring-configured/>

您还需要在编译时或运行时执行编织

用于编译时编织的maven:

<build>
    <finalName>OTLogiciel</finalName>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <id>compile</id>
                    <configuration>
                        <showWeaveInfo>true</showWeaveInfo>
                        <source>${java-version}</source>
                        <target>${java-version}</target>
                        <verbose>false</verbose>
                        <outxml>true</outxml>
                        <aspectLibraries>
                            <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                            </aspectLibrary>
                        </aspectLibraries>
                    </configuration>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                  <groupId>javax.persistence</groupId>
                    <artifactId>persistence-api</artifactId>
                    <version>1.0</version>
                    <optional>true</optional>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>${org.aspectj-version}</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>${org.aspectj-version}</version>
                </dependency>
            </dependencies>
        </plugin>

如果你正在使用eclispe,你还需要安装&#34; ApectJ开发工具&#34;