spring mvc怎么能在项目ear一启动的时候,就自动加载一个类的一个方法,高手们来看看啊

晓旭大军 ibm it specialist  2020-03-03 07:50:55
原来struts one里面struts-config.xml

<plug-in className="jp.sales.oio.oiobama.core.InitPlugin">
<set-property property="sideNaviConfig" value="/WEB-INF/Navigation.xml" />
<set-property property="roleConfig" value="/WEB-INF/Role.xml" />
<set-property property="log4jConfig" value="log4j.xml" />

</plug-in>
-------------------------------------------------------------------------------------------------------
InitPlugin.java
package jp.sales.oio.oiobama.core;

import java.io.InputStream;

import javax.servlet.ServletException;

import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

import com.ibm.jp.ams.tools.core.global.CoreConstants;
import com.ibm.jp.ams.tools.core.logging.LogManager;
import com.ibm.jp.ams.tools.core.logging.Logger;
import com.ibm.jp.ams.web.navigationsupport.digester.NavigationDigester;
import com.ibm.jp.ams.web.navigationsupport.digester.RolesDigester;
import com.ibm.jp.ams.web.navigationsupport.entity.Navigation;
import com.ibm.jp.ams.web.navigationsupport.entity.Roles;

public class InitPlugin implements PlugIn {

private ActionServlet servlet = null;

/* ログ定義xmlファイル名 */
private String log4jConfig = null;
/* properties 表示非表示 ACL */
// private String propertiesAcl = null;

/* ナビゲーション定義xmlファイル名 */
private String sideNaviConfig = null;

private String roleConfig = null;

/**
* <p>Log Manager</p>
*/
private Logger logger = Logger.getLogger(InitPlugin.class);

/**
* Initial処理を実行します。<br/>
*
* @see PlugIn#init(ActionServlet, ModuleConfig)
*/
public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) throws ServletException {
this.servlet = actionServlet;
try {
// ログマネージャーinitialize
initLogManager();
// サイドナビファイル読み込み
initNavigater();
// Role定義読み込み
initRole();
// PropertiesAccessControl init
//initPropertiesACL();
} catch (Exception e) {
throw new ServletException(e);
}
}

/**
* ログマネージャーの初期化処理を行います。
* @throws Exception
*/
private void initLogManager() throws Exception {
LogManager.init(log4jConfig);
}


通过struts-config.xml里面定义的plug in,那样随着项目启动,自动加载一个类比如"jp.sales.oio.oiobama.core.InitPlugin,这个InitPlugin类又继承了import org.apache.struts.action.PlugIn; 所以我认为这个InitPlugin类的public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) throws ServletException 是自动加载的,


----------------------------------------------------------------------------------------------------------------------
问一个问题,现在这个struts 1.1项目改为spring mvc了
spring mvc有没有类似的方法,
Spring MVC 能不能在项目一启动的时候就自动调用一个类(Controller) 的一个方法,

为什么有这个需求呢,因为我的客户端.net程序要求调用java服务器端的webservice,而webservice里面的被调用的方法会用到这个InitPlugin类的一个实例,
如果这个InitPlugin类在拦截器被初始化是很正常的,但是客户端调用webservice里面方法的时候就麻烦了,客户端不能等服务器端的用户登录web,启用拦截器,然后在启用这个类啊,

谁来救救我啊,

看我写的spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">


<!--scan package-->
<!--<context:component-scan base-package="cn.java.controller"/>-->
<context:component-scan base-package="jp.sales.oio.................."/>

<!--driven annoatation-->
<mvc:annotation-driven></mvc:annotation-driven>

<!--view analyze-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/"></property>
<property name="suffix" value=".jsp"/>
</bean>

<!--file upload-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- encording -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- file sieze -->
<property name="maxUploadSize" value="10485760"></property>
</bean>

<bean class="jp.sales.oio.oiobama.core.InitPlugin"/>

-------------------------------------
<bean class="jp.sales.oio.oiobama.core.InitPlugin"/>
这个bean我可以自动实例化么,然后我在实例化里写上我要自动随项目启动的方法

public class InitPlugin {//implements PlugIn

//private ActionServlet servlet = null;
private Controller controller = null;
/* 0グ定義xmlファイル名 */
private String log4jConfig = null;
/* properties 表示非表示 ACL */
// private String propertiesAcl = null;

/* 0ナビゲーション定義xmlファイル名 */
private String sideNaviConfig = null;

private String roleConfig = null;

/**
* <p>Log Manager</p>
*/
private Logger logger = Logger.getLogger(InitPlugin.class);

public void InitPlugin() throws ServletException {
try {
// 0ログマネージャーinitialize
initLogManager();
// 0サイドナビファイル読み込み
initNavigater();
// Role定義読み込み
initRole();
// PropertiesAccessControl init
//initPropertiesACL();
} catch (Exception e) {
throw new ServletException(e);
}
}
可以不
或者大佬们提提宝贵意见,
...全文
12953 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-07-14
引用 楼主 晓旭大军 的回复:
原来struts one里面struts-config.xml 可以不 或者大佬们提提宝贵意见,
可以用aspectJ 注解式切面,用@Before 在方法执行前加载类。
回复
一只三黄鸡 2020-07-13
比楼上的来晚一步,楼上的就很方便了.或者实现一些接口(启动后执行)重写下就行
回复
阿萨德由 2020-07-06

import javax.servlet.Filter;

public class StartFilter implements Filter{
	private final static Logger logger = Logger.getLogger(StartFilter.class);
	
	public void init(FilterConfig fc) throws ServletException {

		new Thread(new Runnable() {
                      @Override
			public void run() {
                              //TODO you want
                        }
		}).start();
	}
       public void destroy() {
	}

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
	}

}

然后在web.xml 中 <filter> <filter-name>startFilter</filter-name> <filter-class>xxxx..StartFilter</filter-class> </filter>
回复
dkwuxiang 2020-07-06
恕我直言 public void InitPlugin() throws ServletException 这是一个构造方法?
回复
a_b_a_b_a_b_a_b 2020-07-06
百度一下spring中的@PostConstruct的注解。可以在项目启动时执行注解的方法。
回复
YangjulongTrue 2020-07-04
跨越5个月的对话 ,其实不用监听器也行 比如写个
过滤器 或 servlet 统配 * 在静态块写东西就行了
当访问 任意地址 必然加载这个类
回复
晓旭大军 2020-07-03
你可以做我的粉丝。老弟
回复
菜鸟①个 2020-03-03
你可以试试用spring事件,当spring容器初始化完成,会发布一个事件ContextStartedEvent,你可以写一个监听器监听这个事件,然后做自己要做的事情。
回复
晓旭大军 2020-03-03
我在自己定义的springmvc.xml 里面追加定义<bean class="jp.sales.oio.oiobama.core.InitPlugin"/>
然后在InitPlugin.java的构造方法里面追加我要调用的方法initRole();

public void InitPlugin() throws ServletException {
System.out.println("20200303 springmvc.xml InitPlugin run");
try {
// 0ログマネージャーinitialize
initLogManager();
// 0サイドナビファイル読み込み
initNavigater();
// Role定義読み込み
initRole();
// PropertiesAccessControl init
//initPropertiesACL();
} catch (Exception e) {
throw new ServletException(e);
}
}

为什么没有起作用呢,就是项目启动的时候,这个构造方法没有被调用起来,为什么?????????????????????????
回复
晓旭大军 2020-03-03
回复
晓旭大军 2020-03-03
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2020-03-03 07:50
社区公告
暂无公告