频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
Spring注入:配置与注解
2016-05-12 09:07:50         来源:ZZ的博客  
收藏   我要投稿

之前在某电商公司的时候也接触过一点Spring,不过了解不深,只是大概知道这个东西的存在。现在在一家公司实习的时候,才系统的看了一下Spring,这个框架网上的解释都很多,但主要都会介绍一下关于spring注入这一点,其实spring还有拦截的功能,而spring本身又是可以通过注解来使用,也可以通过配置文件使用,比较复杂,这里粗略介绍spring的注入层面,后面也许会写一篇关于springMVC的博客。同时本文也会附上本人在自学过程中的一些好资料~~

注入简介

Spring注入可以理解为是对一个对象进行初始化,也就是省去new的这个步骤,类似于工厂模式一样,通过一个工厂制造出这个对象,如果遇到修改,只需要改一处就行了。实现spring注入一般有两种方法,配置文件,或者用注解。各有不同的作用。

注意:本文中涉及到所以例子均默认加入了spring的包,如果没有加入spring包可以自己百度一下用maven或者手动下载spring的依赖包(这里就不给博客了,还是应该自己动动手吧)

 

配置注入:

不重复造轮子,这里已经说明得很清楚了,介绍了两种方式,set注入和构造注入,并且都很详细。至于这篇文中提及到的第三种:接口注入,本人小白观点,应该用interface来注入,在用mybatis框架时一般会接触到,注入这里本人也不介绍这个了,因为涉及到mybatis另一个框架,比较复杂。

PS:这位作者写的spring系列文章的确可以参考一下,本人也从中获益良多。

 

注解注入:

自动装配

在了解注解注入之前,需要先了解一下自动装配这个概念,这篇博客也说得比较详细,可以先参考这个知道一些概念。

首先介绍一下文件结构,Main主要来调试运行,Bean其中一个对象,Test,Bean所依赖的一个对象(也就是Bean成员里有Test对象),如图:

Main.class

\

Bean.class

\

Test.class

\

这里是配置文件

\

从这里可以看出,在bean那里有一个autowrite,这个字段就是用来自动装配的。可以看见在这个标签中我没有写test的引用,这就是自动装配,可以根据名字(byName),也可以根据类型(byType)。所以这里的输出如下

\

如果这里我去掉了autowirte这个字段,由于我也没有在里面引用test,所以这里的test会是空,并且会报错,因为Bean里面的test没有被初始化,所以test里面的getN调用不了,会NullPointer,如下图所示。

\

这里,基于去掉autowrite的基础上,我加一个的test引用,这样又变成了手动装配了,就和上面给的第一篇博客的做法一样了。配置文件如下

\

所以其实自动装配其实就是类A中有对类B的依赖关系(即A类的成员中B类的成员,记得这概念啊),然后可以通过自动注解初始化B类(但还是需要在配置文件中写B类的标签的)

 

注解注入

了解了自动装配,就可以了解一下注解注入,因为就是基于自动装配这一概念的,不同的是注解注入不用在配置文件中配置这么多,只需要配置一点点就可以了,剩下的全部用注解来实现。

还是刚刚那个例子,把配置文件改一下,去掉那些标签,加一个这个标签

\

其中base-package是自己的包名,如果有多个包名可以用分号隔开(分号在引号中)

然后再在目标类上面增加一些注解,如图

Bean.class

\

仅仅在类上面加了个注解,这里的注解其实也可以写@Controller或者@Service,这些个注释从注入效果来说没有什么区别,只是一些逻辑的不同,可以理解为一个变量可以这样声明intnumber,也可以这样声明intn,只是名字不同而已。然后在Test那个地方加了一个@Resource,其实也可以写@Autowirte,不过官方貌似比较推荐些@Resource,其实两个作用也是一样的。这里的@Resource就可以理解为是配置文件中autowirte字段,这里的@Repository可以理解为配置文件里面的标签。

 

Test.class

\

Main.class不变

然后这样运行一下,如图

\

发现Bean中的String对象是null,int值是0,而test的int也是0。这里其实就是没有给这些字段初始化。但是Bean对象和Test是初始化了的(要追究到jvm的话就是Bean和Test都申请了一块内存)。这里也可以理解为调用了Bean和Test的默认构造函数,以为默认构造函数是空的,所以就是什么都没有初始化。这里也可以自己重写默认构造函数,例如把Test.class里面的默认构造函数那段注释去掉,然后运行结果如下:

\

这就是注解注入

 

配置注入VS注解注入

其实可以看出来,这两种的本质其实就是调用了构造函数,不过配置注入中的set注入是在调用构造函数后从配置文件里面读值然后set进去,构造注入是选择了特定的构造函数进行构造。注解注入就是调用了默认构造函数。如果要在注解注入中初始化对象成员中的值(例如本例中Bean的String对象的值),那就需要在默认构造函数中进行初始化。

选择配置注入的好处

配置注入其实和工厂模式差不多,但选择配置注入的好处在于可以把值和代码分开,方便管理,可以在配置文件中赋值

选择注解注入的好处

虽然注解注入又把注解和代码混在一起了,但是也可以方便把配置和类对应起来,而且配置比较简单,写个注解就行了。但是如果你要用注解配置初始化值,就只能在默认构造函数中写。

所以一般常用的是,如果需要值的注入,一般用配置注入,例如数据库连接类,就也可以在那里初始化用户名和密码;如果是无具体值的类,例如只用方法的类,像那些controller和那些service,虽然里面有一些对象,但这些对象不需要给什么值,只要new一个对象就行了,这种一般就用注解注入。

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 注解
上一篇:springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能
下一篇:Flex3与java BlazeDS入门教程及其配置详解
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站