为了账号安全,请及时绑定邮箱和手机立即绑定

liferay 7.2 中的 Spring 自动装配注释

liferay 7.2 中的 Spring 自动装配注释

九州编程 2023-03-17 16:22:39
我想在带有注释的 liferay 7.2 中使用 spring-core @Autowired。所以,我有下一个 portletpackage com.aimprosoft.module;import com.aimprosoft.service.EmployeeService;import org.springframework.beans.factory.annotation.Autowired;import javax.portlet.GenericPortlet;import javax.portlet.PortletException;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import java.io.IOException;public class SamplePortlet  extends GenericPortlet {    @Autowired    private EmployeeService employeeService;    @Override    protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {        response.getWriter().println(employeeService.toString());    }}那么,我必须在 web.xml 或 portlet.xml 中做什么来设置 spring-core 的上下文侦听器?例如在 web-servlet 应用程序中我必须添加    <listener>        <listener-class>            org.springframework.web.context.ContextLoaderListener        </listener-class>    </listener>
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

实际上问题出在春季版本


我使用的是不支持 java 8 的 3.2.0。当我切换到 4.0.0 时,一切都正常了。


综上所述。为了在 liferay 的 portlet 项目中使用 spring core,我必须:


将上下文监听器添加到我的 WEB-INF/web.xml 文件中

<listener>

    <listener-class>

        org.springframework.web.context.ContextLoaderListener

    </listener-class>

</listener>

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>WEB-INF/applicationContext.xml</param-value> 

</context-param>

然后在每个 portlet 中使用以下方法来初始化@Autowired字段

@Override

public void init() throws PortletException {

    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

}

我有以下持久性单元

<persistence-unit name="departments">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <class>com.aimprosoft.dao.model.Employee</class>

    <class>com.aimprosoft.dao.model.Department</class>

    <properties>

        <property name="hibernate.connection.username" value="username"/>

        <property name="hibernate.connection.password" value="password"/>

        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>

        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/departments"/>

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>

    </properties>

</persistence-unit>

最后 spring 上下文看起来如下

<context:annotation-config/>

<context:component-scan base-package="com.aimprosoft"/>

<bean id="departments" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

    <property name="persistenceXmlLocation" value="WEB-INF/persistence.xml"/>

</bean>

<bean id="textResource" class="java.util.ResourceBundle" factory-method="getBundle">

    <constructor-arg value="text_bundle"/>

</bean>

<tx:annotation-driven />

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"/>



查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信