java 项目集成spring_Java Web学习系列——Maven Web项目中集成使用Spring

参考Java Web学习系列——创建基于Maven的Web项目一文,创建一个名为LockMIS的Maven Web项目。

79f7fdfb2384ad811fc64ba0bc471641.png

添加依赖Jar包

修改后的pom.xml文件如下所示:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

4.0.0

com.lock

LockMIS

war

0.0.1-SNAPSHOT

LockMIS Maven Webapp

http://maven.apache.org

4.0.7.RELEASE

junit

junit

4.9

test

org.springframework

spring-context

${org.springframework.version}

org.aspectj

aspectjweaver

1.8.9

cglib

cglib

3.2.4

LockMIS

View Code

修改完pom.xml文件之后,需要更新该项目。

e7f6cde504c15291d3079f73fdd64222.png

执行更新操作,会从Maven仓库下载所依赖的jar包。

93be7d83c0233c559c72dbc3be7104f8.png

使用XML配置文件实现Spring的IOC

以系统构建子系统为例,实现系统配置项各子项目的数据操作。

创建如下主代码结构:

47831e5b04ed1c62db1666762e34a14d.png

新建系统配置项ConfigItem对象bean

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.bean;/*** (T_G_CONFIGITEM)

*

*@authorhs

*@version1.0.0 2016-08-09*/

public class ConfigItem implementsjava.io.Serializable {/**版本号*/

private static final long serialVersionUID = -857268865287138078L;/** */

privateInteger configitemid;/** */

privateString idcode;/** */

privateString label;/** */

privateString itemvalue;/** */

privateString note;/** */

privateInteger datatypeid;/*** 获取

*

*@return

*/

publicInteger getConfigitemid() {return this.configitemid;

}/*** 设置

*

*@paramconfigitemid

**/

public voidsetConfigitemid(Integer configitemid) {this.configitemid =configitemid;

}/*** 获取

*

*@return

*/

publicString getIdcode() {return this.idcode;

}/*** 设置

*

*@paramidcode

**/

public voidsetIdcode(String idcode) {this.idcode =idcode;

}/*** 获取

*

*@return

*/

publicString getLabel() {return this.label;

}/*** 设置

*

*@paramlabel

**/

public voidsetLabel(String label) {this.label =label;

}/*** 获取

*

*@return

*/

publicString getItemvalue() {return this.itemvalue;

}/*** 设置

*

*@paramitemvalue

**/

public voidsetItemvalue(String itemvalue) {this.itemvalue =itemvalue;

}/*** 获取

*

*@return

*/

publicString getNote() {return this.note;

}/*** 设置

*

*@paramnote

**/

public voidsetNote(String note) {this.note =note;

}/*** 获取

*

*@return

*/

publicInteger getDatatypeid() {return this.datatypeid;

}/*** 设置

*

*@paramdatatypeid

**/

public voidsetDatatypeid(Integer datatypeid) {this.datatypeid =datatypeid;

}

}

View Code

操作ConfigItem的接口IConfigItemDao

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.daointerface;importcom.lock.base.bean.ConfigItem;public interfaceIConfigItemDao {publicBoolean updateConfigItem(ConfigItem configItem);

}

View Code

实现IConfigItemDao接口的ConfigItemDaoImpl类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.daoimpl;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;public class ConfigItemDaoImpl implementsIConfigItemDao {

@OverridepublicBoolean updateConfigItem(ConfigItem configItem) {//TODO Auto-generated method stub

return null;

}

}

View Code

Spring容器的配置文件ConfigItemMapper.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

http://www.springframework.org/schema/beans/spring-beans.xsd">

View Code

配置项业务类ConfigItemService

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.service;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;public classConfigItemService {

IConfigItemDao configItemDao;publicConfigItemService() {//容器

ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");//从容器中获得id为configItemDao的bean

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");

}publicBoolean updateConfigItem(ConfigItem configItem){

System.out.println("更新ConfigItem");

Boolean result=configItemDao.updateConfigItem(configItem);

System.out.println(result);returnresult;

}

}

View Code

上述代码添加完成后,执行Maven编译命令;检查编译结果,如果错误,则对应处理直至编译成功。

在测试代码目录下新建BaseTest测试类,并在测试类中调用ConfigItemService的方法进行编码测试。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock;importorg.junit.Test;importcom.lock.base.bean.ConfigItem;importcom.lock.base.service.ConfigItemService;public classBaseTest {

@Testpublic voidtest(){

System.out.println ("test");

ConfigItem configItem= newConfigItem();

ConfigItemService configItemService= newConfigItemService();

configItemService.updateConfigItem(configItem);

}

}

View Code

执行Maven编译命令,编译成功后,运行或者调试该测试代码

31bc72d293cb9c08403d6d117862a9eb.png

正确情况下,输出以下结果

5bfc969dd466beb7964309f8a1ba3fb3.png

使用Spring注解实现其IOC

Spring的注解是个很神奇的东西,对于各种云里雾里的注解,后续会详细剖析,这里只是拿来主义,讲解一下如何配置使用。

修改ConfigItemDaoImpl,为其添加@Component注解。Spring容器能够识别这种特定的注解,并且会自动把它转成容器管理的Bean。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.daoimpl;importorg.springframework.stereotype.Component;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;

@Component("configItemDao")public class ConfigItemDaoImpl implementsIConfigItemDao {

@OverridepublicBoolean updateConfigItem(ConfigItem configItem) {//TODO Auto-generated method stub

return null;

}

}

View Code

修改ConfigItemService,同样添加@Component注解

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.service;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.stereotype.Component;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;

@Componentpublic classConfigItemService {

IConfigItemDao configItemDao;/*public ConfigItemService() {

//容器

ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

//从容器中获得id为configItemDao的bean

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");

}*/

publicBoolean updateConfigItem(ConfigItem configItem){

ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");

System.out.println("更新ConfigItem");

Boolean result=configItemDao.updateConfigItem(configItem);

System.out.println(result);returnresult;

}

}

View Code

修改ConfigItemMapper.xml配置文件

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.0.xsd">

View Code

修改BaseTest测试类,修改原方法或者新添加一个测试方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.lock.base.bean.ConfigItem;importcom.lock.base.service.ConfigItemService;public classBaseTest {/*@Test

public void test(){

System.out.println ("test");

ConfigItem configItem = new ConfigItem();

ConfigItemService configItemService = new ConfigItemService();

configItemService.updateConfigItem(configItem);

}*/@Testpublic voidtest2(){

System.out.println ("test");

ApplicationContext ctx= new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

ConfigItemService configItemService= ctx.getBean(ConfigItemService.class);

ConfigItem configItem= newConfigItem();

configItemService.updateConfigItem(configItem);

}

}

View Code

执行Maven编译命令,编译成功后,运行或者调试该测试代码

063b11ad6ab87a6bcebbf1a618a40b7a.png

可以看到,输出结果与上一种方式相同。

基于Spring的自动装配实现其IOC

在第一种方法中,有一处使用ApplicationContext初始化容器后获得需要的Bean;而在第二种方法中,有两处应用。实际上在Spring中,还可以通过自动装配来简化这一过程。

修改ConfigItemDaoImpl类的注解,用@Repository替换原来的注解

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.daoimpl;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Repository;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;

@Repositorypublic class ConfigItemDaoImpl implementsIConfigItemDao {

@OverridepublicBoolean updateConfigItem(ConfigItem configItem) {//TODO Auto-generated method stub

return null;

}

}

View Code

修改ConfigItemService类的注解为@Service,并且为configItemDao成员变量增加@Autowired注解。@Autowired默认是按照类型装配注入,Spring根据类型从容器中匹配一个Bean给configItemDao

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.service;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Service;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;

@Servicepublic classConfigItemService {

@Autowired

IConfigItemDao configItemDao;/*public ConfigItemService() {

//容器

ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

//从容器中获得id为configItemDao的bean

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");

}*/

publicBoolean updateConfigItem(ConfigItem configItem){/*ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");*/System.out.println("更新ConfigItem");

Boolean result=configItemDao.updateConfigItem(configItem);

System.out.println(result);returnresult;

}

}

View Code

ConfigItemMapper.xm配置文件和测试代码均维持不变,执行Maven编译,然后进行测试

32a5ea7d802b027c9b6af29815292960.png

无配置实现Spring的IOC

在上述三种方式中,Spring初始化容器时都必须使用xml配置文件。实际上,Spring还有一种零配置的方式来实现其IOC,也就是不需要配置文件。

修改ConfigItemService类中configItemDao成员变量的注解为@Resource,Resource注解默认是按照名称来装配注入

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.service;importjavax.annotation.Resource;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Service;importcom.lock.base.bean.ConfigItem;importcom.lock.base.daointerface.IConfigItemDao;

@Servicepublic classConfigItemService {

@Resource

IConfigItemDao configItemDao;/*public ConfigItemService() {

//容器

ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

//从容器中获得id为configItemDao的bean

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");

}*/

publicBoolean updateConfigItem(ConfigItem configItem){/*ApplicationContext ctx=new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

configItemDao=(IConfigItemDao)ctx.getBean("configItemDao");*/System.out.println("更新ConfigItem");

Boolean result=configItemDao.updateConfigItem(configItem);

System.out.println(result);returnresult;

}

}

View Code

由于取消xml文件配置,因此需要新增一个类来实现原xml文件所起的作用。在java主目录下新建Package:com.lock.base.config,并新建AppConfig类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importcom.lock.base.bean.ConfigItem;

@Configuration

@ComponentScan(basePackages="com.lock.base.*")public classAppConfig {

@BeanpublicConfigItem getConfigItem(){return newConfigItem();

}

}

View Code

修改ConfigItem类,为该类添加注解@Component("configItem")

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock.base.bean;importorg.springframework.stereotype.Component;/*** (T_G_CONFIGITEM)

*

*@authorhs

*@version1.0.0 2016-08-09*/@Component("configItem")public class ConfigItem implementsjava.io.Serializable {/**版本号*/

private static final long serialVersionUID = -857268865287138078L;/** */

privateInteger configitemid;/** */

privateString idcode;/** */

privateString label;/** */

privateString itemvalue;/** */

privateString note;/** */

privateInteger datatypeid;/*** 获取

*

*@return

*/

publicInteger getConfigitemid() {return this.configitemid;

}/*** 设置

*

*@paramconfigitemid

**/

public voidsetConfigitemid(Integer configitemid) {this.configitemid =configitemid;

}/*** 获取

*

*@return

*/

publicString getIdcode() {return this.idcode;

}/*** 设置

*

*@paramidcode

**/

public voidsetIdcode(String idcode) {this.idcode =idcode;

}/*** 获取

*

*@return

*/

publicString getLabel() {return this.label;

}/*** 设置

*

*@paramlabel

**/

public voidsetLabel(String label) {this.label =label;

}/*** 获取

*

*@return

*/

publicString getItemvalue() {return this.itemvalue;

}/*** 设置

*

*@paramitemvalue

**/

public voidsetItemvalue(String itemvalue) {this.itemvalue =itemvalue;

}/*** 获取

*

*@return

*/

publicString getNote() {return this.note;

}/*** 设置

*

*@paramnote

**/

public voidsetNote(String note) {this.note =note;

}/*** 获取

*

*@return

*/

publicInteger getDatatypeid() {return this.datatypeid;

}/*** 设置

*

*@paramdatatypeid

**/

public voidsetDatatypeid(Integer datatypeid) {this.datatypeid =datatypeid;

}

}

View Code

修改BaseTest测试类,修改原方法或者新添加一个测试方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.lock;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.lock.base.bean.ConfigItem;importcom.lock.base.config.AppConfig;importcom.lock.base.service.ConfigItemService;public classBaseTest {/*@Test

public void test(){

System.out.println ("test");

ConfigItem configItem = new ConfigItem();

ConfigItemService configItemService = new ConfigItemService();

configItemService.updateConfigItem(configItem);

}

@Test

public void test2(){

System.out.println ("test");

ApplicationContext ctx = new ClassPathXmlApplicationContext("com/lock/base/daomapper/ConfigItemMapper.xml");

ConfigItemService configItemService = ctx.getBean(ConfigItemService.class);

ConfigItem configItem = new ConfigItem();

configItemService.updateConfigItem(configItem);

}*/@Testpublic voidtest3(){

System.out.println ("test");

ApplicationContext ctx=new AnnotationConfigApplicationContext(AppConfig.class);

ConfigItemService configItemService= ctx.getBean(ConfigItemService.class);

ConfigItem configItem1= newConfigItem();

configItemService.updateConfigItem(configItem1);

ConfigItem configItem2= ctx.getBean("configItem",ConfigItem.class);

configItemService.updateConfigItem(configItem2);

ConfigItem configItem3= ctx.getBean("getConfigItem",ConfigItem.class);

configItemService.updateConfigItem(configItem3);

}

}

View Code

在该测试方法中,Spring通过反射AppConfig.class来初始化容器。

执行Maven编译,然后进行测试

cba3072c58e57b075e0a847cdbf3276c.png

项目结构调整

为了使项目文件结构更加清晰明了,对文件结构做如下调整

15d65def6cde641cda7e8ad1d95027c9.png

调整代码结构后,需要修改代码中引用的包路径。编译后测试无误。

小结

本文在上一篇Java Web学习系列——创建基于Maven的Web项目基础之上,介绍了Maven Web项目添加Spring及其相关依赖JAR包的方法。并以完整实例的形式分别讲解了四种不同的实现Spring IOC的方式。通过比较来看,无配置实现Spring IOC的方式更显简洁易用,但这本身还是建立在Spring注解的基础之上。后续也会更详细的说明Spring各项注解的详细应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值