Spring liferay 7.2 中的自动装配注释
Spring autowired annotation in liferay 7.2
大家好
我想在带有 @Autowired
注释的 liferay 7.2 中使用 spring-core。所以,我有下一个 portlet
package 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>
实际上问题出在 spring 版本
我用的是不支持的3.2.0 java 8. 当我切换到4.0.0 时,一切都正常了。
总之。要在 liferay 的 portlet 项目中使用 spring 核心,我必须:
- 将上下文侦听器添加到我的 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"/>
大家好
我想在带有 @Autowired
注释的 liferay 7.2 中使用 spring-core。所以,我有下一个 portlet
package 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>
实际上问题出在 spring 版本
我用的是不支持的3.2.0 java 8. 当我切换到4.0.0 时,一切都正常了。
总之。要在 liferay 的 portlet 项目中使用 spring 核心,我必须:
- 将上下文侦听器添加到我的 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"/>