Spring项目中执行Java脚本
问题:在已搭建好Spring环境的JavaWeb项目中,怎么运行一段Java代码,执行一些类似脚本的功能。
情况一:测试局部功能,不需要依赖Spring框架的。
方法:IDEA中新建一个类,编写主函数(快捷键psvm),把要测试的一小段代码写在这个主函数中,然后右键选择Run...Main(),即可独立运行本类。
public static void main(String[] args) { System.out.println(UUID.randomUUID().toString()); }
情况二:运行的功能需要依赖Spring框架的,如需要调用Service层、Dao层的。比如统计数据库中的相关数据并输出日志、更新服务器资源等。
方法:跟方法一类似,只不过需要依赖Spring框架,要在主函数中手动引入Spring环境,才能调用现有的Service层、Dao层功能。网上找到的Java脚本引入Spring环境的方法如下。
public static void main(String[] args) { GenericXmlApplicationContext context = new GenericXmlApplicationContext(); context.setValidating(false); context.load("classpath*:dispatcher-servlet.xml"); // 上下文环境引入Spring的配置文件,注意文件名一致 context.refresh(); // 调用Service层执行之后的逻辑 }
情况三:同样是运行的功能需要依赖Spring框架的,如需要调用Service层、Dao层的。
思路:跟方法二的区别是不在新建的类中写主函数,而是采用标准的走接口的形式执行Java代码。即写一个接口方法,运行后端服务,调用时可以写一个网页上的按钮触发,或者是直接在浏览器输入url触发都可以。
写法:参考SSM架构的Java项目,在Controller、Service、ServiceImpl、Dao层都新建一个文件,采用Controller层调Service层接口,ServiceImpl层是Service实现类,ServiceImpl层调Dao层跟数据库交互。
接口入口Controller层:
@Controller public class UserController { @Autowired private IUserService iUserService; @RequestMapping(value = "test.do", method = RequestMethod.GET) @ResponseBody public void testFunction(String username){ iUserService.test(username); } }
其他层根据自己需求写就行了,跟着SSM架构的分层与调用套路即可。
注意一个小问题是@RequestMapping注释中method可以不写,如果写为method = RequestMethod.POST则浏览器不能通过地址栏输入url来调用该接口,因为地址栏url用的是GET请求方法。如果仅为内部开发环境下运行脚本,根据自己需求怎么方便怎么来就好。