Annotation(三)——Spring注解开发

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

一,首先需要在配置文件中增加命名空间的和约束文件:

[html] view
plain
copyprint?

  1. <beans ...
  2. xmlns:context="http://www.springframework.org/schema/context"
  3. xsi:schemaLocation="
  4. ...
  5. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  6. ">

二,开启Spring的注解功能,这样Spring环境才会进行指定位置的扫描,进行类之间的关联组合:

[html] view
plain
copyprint?

  1. <!-- 扫描注解类
  2. base-package : 表示当前扫描的包,框架会根据包查找所有使用注解的类
  3. -->
  4. <context:component-scan base-package="com.ljh.spring.*" />

三,声明注解类,让Spring框架可以识别:

1,类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式:

控制层:@Controller

服务层:@Service

持久层:@Repository

类似于我们配置文件中的:

[html] view
plain
copyprint?

  1. <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的类:

[html] view
plain
copyprint?

  1. <bean id="orgAction" class="com.ljh.web.action.OrgAction" scope="prototype"></bean>

而在Spring注解开发中也提供了类似的属性来解决此问题,在action类前边设定如下:

@Scope("prototype")

4,利用配置文件声明Dao层类时,通常是这样的:

[html] view
plain
copyprint?

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

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

[java] view
plain
copyprint?

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

这是sessionFactory的set注入方法,所以如果我们能够重写此方法,在此方法上进行@Resource注解,即可解决我们的问题,但是可以看到此方法是用final进行修饰的,所以通常情况下,我们采用下边的这种方法进行解决:

[java] view
plain
copyprint?

  1. @Repository("orgDao")
  2. public class OrgDaoImpl extends HibernateDaoSupport implements OrgDao {
  3. @Resource
  4. //自定义了方法,解决了父类中final修饰不能重写的问题
  5. public void setSuperSessionFactory(SessionFactory sessionFactory) {
  6. //调用了父类的setSessionFactory方法
  7. super.setSessionFactory(sessionFactory);
  8. }
  9. }

这样,Dao层的sessionFactory就进行了注入,我们可以正常编写我们的Dao层代码了。当然了对于Dao层如果我们使用了Ibatis,同样可以使用这种方法进行Ibatis核心对象sqlMapClient的注入。

综上,为Spring框架的注解开发常用注解,总体感觉还是比较简单,最起码相对其它两个框架而言,主要是通过注解完成对象的管理,和对象之间的组合,即Spring的IoC功能。注解的开发还是能大大提高我们的开发效率的,但是还是那句话,它在一定程度上违背了OCP原则,所以大力推荐使用注解的开发的前提还是我们的需求比较固定,变动较小。

时间: 2024-12-26 00:29:06

Annotation(三)——Spring注解开发的相关文章

spring注解开发中常用注解以及简单配置

一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向spring容器中注入bean对象, 然而,通过注解编程可以缩短我们开发的时间,简化程序员的代码编写. 2.如何开启注解开发:最常用的方法是使用<mvc:annotation-driven/>来开启注解编程(用一个标签配置了spring注解编程的映射器和适配器,同时配置了许多的参数) 3.如何将有注解的be

spring注解开发及AOP

Spring的bean管理(注解) 注解介绍 1 代码里面特殊标记,使用注解可以完成功能 2 注解写法 @注解名称(属性名称=属性值) 3 注解使用在类上面,方法上面 和 属性上面 Spring注解开发准备 1 导入jar包 (1)导入基本的jar包 (2)导入aop的jar包 2 创建类,创建方法 3 创建spring配置文件,引入约束 (1)第一天做ioc基本功能,引入约束beans (2)做spring的ioc注解开发,引入新的约束 <beans xmlns:xsi="http://

Spring 注解开发和测试

一,Spring注解开发 1.1 Spring原始注解 1.2 Spring新注解 二,Spring整合Junit 2.1 原始Junit测试Spring的问题 2.2 spring整合junit 一,Spring注解开发 1.1 Spring原始注解 Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率.Spring原始注解主要是替代的配置 ,从而尽量解决配置繁重的问题. 有如下原始注解: 注解 说明 @Com

Struts2+Spring3+MyBatis3整合以及Spring注解开发

 分类: Web(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在做一个SpringMVC+spring+MyBatis的项目,突然想起以前自己要搭建一个Struts2+Spring+IBatis的框架,但是没成功,正好看见培训时候老师给的千里之行的开源项目.于是将这个项目提供的SQL加入到了自己的数据库中(所以数据和项目名用的是qlzx),打算以后做练习的时候用这个数据库.那么接下来问题来了(不要说某翔或者不约,不是那个问题):我有了数据库和数据,想要搭建一个网站,该怎么做

Annotation(四)——Struts2注解开发

Hibernate和Spring框架的开发前边总结了,这次看一下流行的MVC流程框架Struts2的注解开发吧.Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: [html] view plaincopyprint? <span style="font-size:18px;">  <!-- 这是包名和命名空间的声明 --> <package name

Spring框架(4)--Spring注解开发

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替核心配置文件中的依赖注入可以达到简化配置的效果,提高开发效率. 几个常用的原始注解: 创建对象的注解: 注解 说明 @Component 使用在类上,用于实例化Bean @Controller 使用在web层类上,用于实例化Bean @Service 使用在service层类上,用于实例化Bean @Repository 使用在dao层类上用于,实例化Bean 依赖注入的注解: 注解 说明 @Auto

Spring注解开发系列 VIII --- SpringMVC

SpringMVC是三层架构中的控制层部分,有过JavaWEB开发经验的同学一定很熟悉它的使用了.这边有我之前整理的SpringMVC相关的链接: 1.SpringMVC入门 2.SpringMVC进阶 3.深入SpringMVC注解 看过之后大致对springmvc有一个了解,但对于真正完全掌握springmvc还差得远,本篇博客主要针对的是springmvc的注解开发,传统的项目使用spingmvc避免不了地需要在web.xml里配置前端控制器等等,想要在项目中优雅地去掉这些配置,还得学习如

spring注解开发AnnotationConfigApplicationContext的使用

使用AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文.避免使用application.xml进行配置.相比XML配置,更加便捷. 示例 AppConfig.java package com.myapp.config; import com.myapp.Entitlement; import org.springframework.context.annotation.Bean; import org.springfram

spring注解开发

applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:c="http://www.springframework.org/schema/c" xmlns:p="http://www.springfram