Annotation(三)——Spring注解开发
Spring框架的核心功能IoC(Inversion of Control),也就是通过Spring容器进行对象的管理,以及对象之间组合关系的映射。通常情况下我们会在xml配置文件中进行action,service,dao等层的声明,然后并告知框架我们想要的注入方式,然后在类中声明要组合类的get,set方法。而通过Spring框架中注解的运用也就主要是解决这类问题的。而框架中另一个核心知识AOP,一种面向横切面的方法编程,在程序中一般都是进行一次设置就可以的,所以都还放在配置文件中。例如声明式事物的设置,一次设置,后边我就不用管了,所以这个没有必要使用注解进行简化。因为工作量都差不多。好了,看一下在Spring中如何使用注解进行开发吧!
一,首先需要在配置文件中增加命名空间的和约束文件:

<beans ...
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
/>

二,开启Spring的注解功能,这样Spring环境才会进行指定位置的扫描,进行类之间的关联组合:
<!-- 扫描注解类
base-package : 表示当前扫描的包,框架会根据包查找所有使用注解的类
-->
<context:component-scan base-package="com.ljh.spring.*" />
三,声明注解类,让Spring框架可以识别:
1,类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式:
控制层:@Controller
服务层:@Service
持久层:@Repository
类似于我们配置文件中的:
<bean id="orgService" class="com.ljh.web.Service.OrgService">
</bean>
默认情况下使用注解声明的Bean对象id名称为:
类名称的首字母小写,一般不需要我们进行设置,如果想要设置时,例如我们指定的是实现类,而名字指向了接口,直接添加value属性即可:@Service(value="name"),当然value是可以省略的。
Spring框架还为我们提供了代替上边三个分层注解的通用注解:@Component.当然提倡大家使用分层注解更好一些,区分层次比较明确。
2,自动装配功能的实现对象之间的组合关系,在属性前边指定下边的注解:
@Autowired : 采用类型的方式完成自动装配 : byType
@Resource : 采用名称+类型的方式完成自动装配 : byName +byType,此种方法推荐使用。
另外Spring提供的两种注解的自动装配功能,属性不需要声明set,get方法也可以完成组合功能,这是非常方便的。
3,在声明action时,需要指定其为多例的,解决线程安全的问题,在配置文件中我们通常会这样声明action的类:
<bean id="orgAction" class="com.ljh.web.action.OrgAction" scope="prototype">
</bean>
而在Spring注解开发中也提供了类似的属性来解决此问题,在action类前边设定如下:@Scope("prototype")
4,利用配置文件声明Dao层类时,通常是这样的

<!-- dao层需要引用我们的sessionFactory工厂,自动装配时,
是会自动装配名叫sessionFactory的工厂,所以可以省略。
-->
<bean name ="orgTypeDao" class="com.ljh.dao.impl.OrgTypeDaoImpl">
<!--<property name="sessionFactory" ref="sessionFactory"></property>-->
</bean>

而,注解开发的方法如何进行sessionFactory的注入呢?由于Dao层继承了父类HibernateDaoSupport,而在父类中有这样一个方法:

//父类中的sessionFactory的set注入方法
public final void setSessionFactory(SessionFactory sessionFactory) {
if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
this.hibernateTemplate = createHibernateTemplate(sessionFactory);
}
}

这是sessionFactory的set注入方法,所以如果我们能够重写此方法,在此方法上进行@Resource注解,即可解决我们的问题,但是可以看到此方法是用final进行修饰的,所以通常情况下,我们采用下边的这种方法进行解决:
@Repository("orgDao")
public class OrgDaoImpl extends HibernateDaoSupport implements OrgDao { @Resource
//自定义了方法,解决了父类中final修饰不能重写的问题
public void setSuperSessionFactory(SessionFactory sessionFactory) {
//调用了父类的setSessionFactory方法
super.setSessionFactory(sessionFactory);
}
}
这样,Dao层的sessionFactory就进行了注入,我们可以正常编写我们的Dao层代码了。当然了对于Dao层如果我们使用了Ibatis,同样可以使用这种方法进行Ibatis核心对象sqlMapClient的注入。
综上,为Spring框架的注解开发常用注解,总体感觉还是比较简单,最起码相对其它两个框架而言,主要是通过注解完成对象的管理,和对象之间的组合,即Spring的IoC功能。注解的开发还是能大大提高我们的开发效率的,但是还是那句话,它在一定程度上违背了OCP原则,所以大力推荐使用注解的开发的前提还是我们的需求比较固定,变动较小。
Annotation(三)——Spring注解开发的更多相关文章
- 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...
- 浅尝Spring注解开发_Servlet3.0与SpringMVC
浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持.异步处理,可以省去web.xml ...
- JAVAEE——SSH项目实战06:统计信息管理、Spring注解开发和EasyUI
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7190925.html 一.统计信息管理 二.Spring注解开发 1.service ...
- Spring注解开发-全面解析常用注解使用方法之生命周期
本文github位置:https://github.com/WillVi/Spring-Annotation/ 往期文章:Spring注解开发-全面解析常用注解使用方法之组件注册 bean生命周期 ...
- spring注解开发:容器中注册组件方式
1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...
- 浅尝Spring注解开发_Bean生命周期及执行过程
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...
- spring注解开发中常用注解以及简单配置
一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...
- Spring注解开发系列Ⅵ --- AOP&事务
注解开发 --- AOP AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,横向重复,纵向抽取.详细的AO ...
- 浅尝Spring注解开发_AOP原理及完整过程分析(源码)
浅尝Spring注解开发_AOP原理及完整过程分析(源码) 浅尝Spring注解开发,基于Spring 4.3.12 分析AOP执行过程及源码,包含AOP注解使用.AOP原理.分析Annotation ...
随机推荐
- X Shell 4配色方案[Solarized Dark]
X Shell 4是个很好的Windows下登录Linux服务器的终端,比Putty好用 X Shell 4的下面这种方案,我个人很喜欢 用vim写shell脚本的效果: 按如下步骤配置: 1)把下面 ...
- 秀才每天一篇之—SEO是什么?
[导读]SEO是什么?秀才搁笔七天以来.遇到非常多事情.站点被K ,排名掉了. 却找不出原因,開始迷茫了.以至于没有心情来照应这个博客,不好意思了,各位.在这七天以来.秀才一直在思考,SEO究竟应该怎 ...
- 使用Mina框架开发 QQ Android 客户端
Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步AP ...
- MenuButton( 菜单按钮)
一. 加载方式//class 加载方式<a href="javascript:void(0)" id="edit" class="easyui- ...
- ubantu命令安装banner
banner命令可以输出图形字符 在线yum安装 $ sudo apt-get update;sudo apt-get install sysvbanner
- Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...
- DNN7网站系统需求及部署指南详解
此安装指南适用于DNN6.x和DNN7.x在本地测试及主机的安装.最近QQ群里不少朋友问我关于DotNetNuke的安装和运行的问题. 为了让大家更清楚地了解DNN的安装方式,我在这里对DotNetN ...
- WebBrowser.ExecWB方法
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- grunt之dev-pro环境切换
在项目开发过程中和发布阶段需要在开发环境(dev)和生产环境(pro)之间切换,静态文件引用的切换等等. 使用grunt要如何解决上述问题,这里提供一个案列供参考. 用到的grunt插件: 文件合并: ...
- UVa 10098: Generating Fast
这道题要求按字典序生成字符串的全排列,不可重复(但字符可以重复,且区分大小写). 基本思路是先对输入的字符串按字典序排序,然后从第一位开始递归,从所有输入的字符中选出一个填充,然后再选第二位..... ...