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注入方法
- ublic 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原则,所以大力推荐使用注解的开发的前提还是我们的需求比较固定,变动较小。
相关推荐
在Java开发中,Spring和Hibernate是两个非常重要的框架,Spring提供了全面的结构化和依赖注入功能,而Hibernate则是一个强大的对象关系映射(ORM)工具,使得Java开发者可以方便地操作数据库。本文将详细介绍如何在...
本文将深入探讨如何通过注解(Annotation)和`@Resource`来实现自动装配,以及其背后的源码实现。 ### 一、注解驱动的自动装配 在Spring 2.5引入了注解支持后,开发者可以使用注解来声明Bean的属性、方法或构造...
在这个基于Spring注解的SSH2框架集成中,我们将深入探讨如何将这三个组件有效地整合,并利用Spring的注解驱动特性提升开发效率。 首先,Struts2是一个强大的MVC(Model-View-Controller)框架,它在Struts1的基础上...
### Spring 3.0 注解开发的简单例子(@Service) #### 概述 Spring框架作为Java企业级开发中不可或缺的一部分,其版本不断演进的同时,也在不断地引入新的特性以简化开发流程并提升代码的可维护性。从Spring 2.0版本...
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; @SpringBootApplication @EnableDubbo public class ProviderApplication { public static void main(String[] args) { ...
本文将重点介绍四种常用的Spring注解——`@Component`、`@Repository`、`@Service`、`@Controller`的区别及其应用场景。 #### 二、Spring 注解概述 ##### 2.1 @Component `@Component`是最基础的一种注解,用于...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能和模块化设计深受开发者喜爱。在Spring框架中,面向切面编程(AOP)是一个关键特性,它允许我们进行横切关注点的分离,如日志、事务管理等,从而...
`@Transactional`注解来自`org.springframework.transaction.annotation`包,它是Spring对声明式事务管理的主要支持。这个注解可以应用在类或方法级别,用来定义事务的边界。当注解在类级别时,所有该类的公共方法都...
注解驱动是Spring 2.5的一个重要特性,它简化了Spring MVC的应用程序开发过程。传统的Spring MVC应用程序通常需要在XML配置文件中进行大量的手动配置,包括定义各种Bean、配置请求映射等。这种方式虽然有效,但相对...
在Spring中,切面可以由一个类定义,这个类包含了通知(Advice)——也就是实际执行的代码,以及切点(Pointcut)——定义了何时执行这些通知。 接下来,我们将深入到基于注解的配置。在Spring 2.0中,我们可以使用...
在本项目"spring-txn-annotation-...通过深入理解并实践这个"spring-txn-annotation-demo"项目,初学者可以更好地掌握Spring框架的事务管理、注解驱动以及与MySQL数据库的集成,为后续的Java EE开发打下坚实的基础。
标题中的“基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发”指的是使用注解的方式将三个流行的Java企业级框架——Struts2、Hibernate和Spring进行集成开发。这样的集成有助于简化配置,提高代码的可读性...
Spring Security 为此提供了一个非常实用的注解——`@PreAuthorize`。该注解可以应用于方法级别,用来限制对特定服务方法的访问权限。 ##### 2.1 示例代码 示例 I:只有拥有 `ROLE_USER` 角色的用户才能调用 `...
在Spring AOP中,前置通知是通过实现`org.aspectj.lang.annotation.Before`注解的方法来定义的。这样的方法将在目标方法被调用之前执行,通常用于日志记录、权限检查等场景。例如: ```java @Aspect public class ...
在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...
Spring AOP支持两种实现方式:基于代理(Proxy-based)和基于注解(Annotation-based)。 - **基于代理的AOP**:Spring会为被代理的目标对象创建一个代理对象,当调用代理对象的方法时,实际上会触发AOP逻辑。 - ...
`spring_ioc_xml`和`spring_ioc_annotation`涵盖了Spring的另一核心特性——IOC(Inversion of Control,控制反转)。IOC容器负责管理对象的生命周期和依赖关系。在XML配置中,我们可以定义bean的定义,包括它们的...
#### 三、Spring框架简介 Spring框架是用于构建企业级Java应用程序的一种轻量级框架。它提供了一种灵活的方式来配置和管理应用程序的组件。Spring的核心特性包括: 1. **依赖注入(Dependency Injection, DI)**:...
标题中的"spring_day03_spring_"表明了本次学习的主题是关于Spring框架的第三天课程,而描述中的"heima spring source code day 03"则提示我们将深入研究黑魔法(可能指复杂或深入的内容)——Spring框架的源码。...
### SSM框架——详细整合教程(Spring+SpringMVC+MyBatis) #### 一、基础知识 ##### 1.1 Spring框架 Spring 是一个开源框架,最初由 Rod Johnson 在他的著作《Expert One-On-One J2EE Development and Design》中...