`

Spring学习笔记——基础知识

阅读更多
1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EEdevelopment without EJB》是java高手进阶必看的宝典,Spring就是从这两本书的理论发展起来的。
Spring主要核心是:
(1).控制反转(IOC):以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用spring时我们就不需要关心通过何种方式实例化一个对象,spring通过控制反转机制自动为我们实例化一个对象。
(2).依赖注入(DI):Spring使用java Bean对象的Set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。
(3).面向切面编程(AOP):在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
2.在Spring中,所有管理的对象都是JavaBean对象,而BeanFactory和ApplicationContext就是spring框架的两个IOC容器,现在一般使用ApplicationnContext,其不但包含了BeanFactory的作用,同时还进行更多的扩展。
实例化Spring IOC容器的简单方法:
(1).方法1:
[java] view plaincopy
//如果只有一个spring配置文件也可以直接传递一个string参数,不需要使用数组 
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{“spring配置文件路径”}); 

(2).方法2:
[java] view plaincopy
Resource res = new FileSystemResource(“spring配置文件”); 
BeanFactory factory = new XMLBeanFactory(res); 

2. Spring多个配置文件组合方法:
很多时候,由于Spring需要管理和配置的东西比较多,如果都放在一个配置文件中,配置文件会变的比较大,同时不方便与维护,一般好的做法是按照功能模块将Spring配置文件分开,例如:DAO层配置到一个spring-dao.xml配置文件中,Service层配置到spring-service.xml文件中,Struts的action配置到spring-action.xml文件中,然后通过下面两种办法将这些分散的配置文件组合起来:
(1).方法1:在一个作为Spring总配置文件中的<bean>元素定义之前,通过<import>元素将要引入的spring其他配置文件引入,例如:
[xhtml] view plaincopy
<beans> 
       <import resource=”spring-dao.xml”/> 
       <import resource=”spring-service.xml”/> 
       <import resource=”spring-action.xml”/> 
       …… 
       <bean> 
       </bean> 
       …… 
</beans> 

(2).方法2:
a.对于JavaSE的工程,当使用下面方法获取ApplicationContext对象时将所有的spring配置文件通过数组传递进去,也可以使用通配符如spring-*.xml方式。
[java] view plaincopy
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{“spring配置文件路径”}); 

b.对于JavaEE工程,在web.xml文件中指定spring配置文件时可以指定多个,中间有逗号“,”分隔,也可以使用通配符方式。
3. spring配置文件bean的配置规则:
(1).一个Bean可以通过一个id属性惟一指定和引用,如果spring配置文件中有两个以上相同的id时,spring会报错id冲突。
(2).一个Bean也可以通过一个name属性来引用和指定,如果spring配置文件中有两个以上相同name的Bean,则spring通过name引用时,运行时后面的会自动覆盖前面相同name的bean引用,而不会报错。
4.spring依赖注入3种方式:
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,spring的依赖注入有3种方式:
(1).使用构造器注入:
[xhtml] view plaincopy
<bean id=”……” class=”……”> 
       <constructor-arg>构造函数需要的参数1</constructor-arg> 
       <constructor-arg>构造函数需要的参数2</constructor-arg> 
       …… 
</bean> 

使用构造器注入方式时:spring在实例化该Bean时会调用配置参数符合的构造方法。
(2).使用属性的setter注入:
[xhtml] view plaincopy
<bean id=”……” class=”……”> 
       <property name=”属性1” value=”……”/> 
       <property name=”属性2” value=”……”/> 
       …… 
</bean> 

使用属性的setter注入方式时,所注入的属性必须提供setter和getter方法,spring在实例化时会自动调用无参数的构造方法或者静态工厂方法,实例化之后自动调用属性的set方法将值设置进去。
(3).使用Field字段注入方式,该方式是spring2.5以后提供的基于java 注解(annotation)方式的注入,就是在java中的字段上或者setter方法上通过使用注解方式进行spring的依赖注入。
例如:
a.字段注入:
[java] view plaincopy
@Resource 
private  UserDao dao; 

b. 属性注入:
[java] view plaincopy
@Resource 
public void setUserDao(UserDao dao){ 
       this.dao = dao; 


5.spring通过注入方式注入依赖bean的方法:
Spring中为一个bean注入其依赖的另一个bean时,通过使用ref来注入另一个bean,简单例子如下:
如果bean2中通过bean1属性引用了bean1则通过下面方式注入:
[xhtml] view plaincopy
<beans> 
       <bean id=”bean1” class=”……”> 
              <property name=”属性1” value=”……”/> 
              …… 
       </bean> 
<bean id=”bean2” class=”……”> 
              <property name=”bean1” ref=”bean1”/> 
              …… 
       </bean> 
</beans> 

6.spring的集合注入:
当需要给Bean的集合引用注入值时,spring也提供了相应的方法:
(1).Set集合注入:
[xhtml] view plaincopy
<bean id=”……” class=”……”> 
<set> 
              <value>value1</value> 
              <value>value2</value> 
              …… 
       </set> 
</bean> 

(2).List集合注入:
[xhtml] view plaincopy
<bean id=”……” class=”……”> 
<list> 
              <value>value1</value> 
              <value>value2</value> 
              …… 
       </list> 
</bean> 

(3).Map集合注入:
[xhtml] view plaincopy
<bean id=”……” class=”……”> 
<map> 
              <entry key=”key1” value=”value1”> 
              <entry key=”key2” value=”value2”> 
              …… 
       </map> 
</bean> 

(4).Properties注入:
[xhtml] view plaincopy
<bean id=”……” class=”……”> 
<props> 
              <prop key=”key1”>value1</prop> 
              <prop key=”key2”>value2</prop> 
              …… 
       </props> 
</bean> 

注意:Spring会自动将其数据类型转换,支持泛型。
8. Java注解(Annotation)简单介绍:
Java注解(Annotation)是通过在java源文件上添加标记字段,然后通过反射的反射在编译或者运行时获取这些标记字段以及其标记目标,然后进行相应处理的方法,曾经风靡一时的XDoclet就是最早的java注解的工作原理说明。使用注解可以进行某些配置,大大减少xml配置文件的书写麻烦,但是也有人认为注解方式不方便理解和维护,因此对于注解VS XML配置文件一直争论不断,个人感觉没有好坏之分,合适就是最好的。
(1).JDK内置注解:
JDK内置了3个注解:
a.      @Override:声明某个方法被重写。
b.      @Deprectated:声明某个方法过时,不推荐使用。
c.      @SuppressWarning({“unchecked”,…….}):告诉编译器对于那些警告信息忽略。
(2).自定义java注解:
Java注解就是一种特殊的接口,自定java注解非常方便,简单例子如下:
[java] view plaincopy
@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.CLASS) 
public @interface TestAnnotation{ 
String value() default “”; 


(3).若要想自定义的注解可以被继承,则需要在自定义注解类上加上“@Inherited”注解。
注意和说明:
a. java的注解实际上是自动继承了java.lang.annotation.Annotation接口,因此在自定义注解时不能继承其他的注解或者接口。
b. Retention:告诉编译器如何处理注解,即注解运行在什么时刻。
RetentionPolicy是个枚举类型,有以下三种状态值:
1).SOURCE:该注解存储在源文件中,编译过后即废弃。
2).CLASS:该注解存储在class文件中,是其缺省的值。
3).RUNTIME:该注解存储在class文件中,并且有Java虚拟机读入解析,该类型非常重要,可以使用反射机制获取注解相关信息,可以进行程序分析处理。
c. @Target:指定注解的目标使用对象。
ElementType也是个枚举类型,有以下几种状态值:
1).TYPE:该注解适用于class,interface,enum等类级别的目标对象。
2).FIELD:该注解适用于类中字段级别的目标对象。
3).METHOD:该注解适用于类中方法级别的目标对象。
4).PARAMETER:该注解适用于方法参数级别的目标对象。
5).CONSTRUCTOR:该注解适用于类构造方法。
6).LOCAL_VARIABLE:该注解适用于局部变量。
7).ANNOTATION_TYPE:该注解适用于annotation对象。
8).PACKAGE:该注解适用于package对象。
d.注解里面只能声明属性,不能声明方法,声明属性的方式比较特殊:
语法格式为:数据类型 属性() default 默认值(默认值是可选的); 如:Stringvalue();
使用时,“注解对象(属性=属性值)”为注解指定属性值,通过“注解对象.属性;”就可以得到注解属性的值。
e.注解的解析:使用java反射机制获得注解的目标对象就可以得到注解对象,如:
通过反射得到了注解目标的Field对象field,则通过“field.getAnnotation(注解类.class);”就可以得到注解对象。
9.      基于注解的Spring配置准备条件:
从Spring2.5以后,Spring开始全面支持注解方式配置,所以可以不用写xml配置文件,一样可以使用spring。
(1).使用spring注解方式,必须加入spring注解方式所依赖的jar包:common-annotation.jar。
(2).使用注解方式时,必须在spring配置文件的schema中添加注解的命名空间如下:
[xhtml] view plaincopy
xmlns:context=”http://www.springframework.org/schema/context” 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-2.5.xsd 

(3).在spring配置文件中注册注解处理器:
在spring配置文件中<.bean>元素之前添加:
[xhtml] view plaincopy
<context:annotation-config> 

10.  基于注解的spring配置:
Spring2.5中使用四个注解按功能来进行对bean的配置:
(1).@Component:泛指组件,对于一般不好归类的java Bean使用。
(2).@Service:用于标注配置业务层(service层)组件。
(3).@Controller:用于标注配置控制层的组件(如Struts中的action)。
(4).@Repository:用于标注配置数据访问层组件,即一般的DAO层Bean对象。
注意:对于使用spring注解方式配置的bean对象,bean引用时默认名称为被注解名称的首字母小写形式,也可以指定名称,如:@Service(“userDao“)。
11.   Spring的自动装配:
自动装配的是指不用手动显式配置java Bean之间依赖关系,而是让spring依据某种规则自动将合适的对象注入到目标对象的过程。Spring中常用@Autowire和@Resource来进行自动装配。
(1).@Autowire:默认是按照对象的数据类型进行自动装配的,如
[java] view plaincopy
@Autowire 
private UserDao userDao; 

spring框架在运行时会自动将类型为UserDao的对象注入进来。
(2).@Resource:默认是按照名称或者Id进行自动装配的,只有当找不到匹配的名称或者Id时才按类型进行装配,如:
[java] view plaincopy
@Resource(name=”userDao”) 
private UsreDao userDao; 

spring框架在运行时会将配置名称或者id为“userDao”的对象注入进来。
注意:@Autowire和@Resource都既可以写在字段上,也可以写在set方法上。
12.   Spring的自动扫描:
Spring自动扫描机制是指,我们使用基于注解的spring配置方式后,spring的配置文件中只需要注册注解处理器,不用显式地配置Bean,当spring在运行时会自动扫描根据给定的条件下类路径中的所有bean,根据注解将它们注入和装配起来并进行初始化的过程。
自动扫描很简单,只需要在spring的配置文件中添加如:
[xhtml] view plaincopy
<context:component-scan base-package=“要自动扫描的包名“> 

Spring在运行时就可以对指定的包中所有添加了Spring注解的bean自动扫描,注入,装配和初始化。
注意:基于注解的spring配置,自动装配和自动扫描是紧密联系在一起协同工作的,都需要引入context的命名空间。
分享到:
评论

相关推荐

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    web学习笔记 —— jsp基础语法

    本文将深入探讨"Web学习笔记——jsp基础语法"这一主题,重点关注JSP(JavaServer Pages)的基础知识。JSP是Java平台上的动态网页技术,它允许开发者将HTML、XML或其他标记语言与Java代码结合,以创建交互式的Web应用...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是Java初学者入门的重要参考资料,它以PPT的形式提供了一种直观易懂的学习途径。这份笔记涵盖了Java编程语言的...因此,这份"Java JDK 6学习笔记——ppt简体版"对于Java初学者来说是一份宝贵的资源。

    Spring技术内幕 学习笔记

    8. **Spring学习笔记1——基础知识**: 包含了Spring框架的基本概念,如Bean工厂、ApplicationContext、Bean的作用域、依赖注入的基础知识,以及如何创建和配置Bean。 9. **SqlMapClientTemplate对Ibatis的封装**...

    个人学习的java笔记——思维导图

    这份"个人学习的java笔记——思维导图"是作者学习Java过程中的总结,通过思维导图的形式,将复杂的概念和知识结构化,便于理解和记忆。下面,我们将深入探讨其中涉及的一些关键知识点。 1. **基础语法**:Java的...

    spring學習筆記——Helloworld

    在本篇“Spring学习笔记——HelloWorld”中,我们将探讨Spring框架的基础知识,以及如何创建一个简单的Spring应用程序。Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能,包括依赖注入、AOP...

    spring5学习笔记

    《Spring5学习笔记详解》 在当今的Java开发领域,Spring框架无疑是最为广泛使用的轻量级框架之一,尤其在Spring5版本发布后,其功能更加强大且易用。本篇文章将根据提供的文件名,深入探讨Spring5的核心概念、特性...

    Spring编程学习笔记

    ### Spring编程学习笔记知识点概述 #### 一、Spring框架简介 Spring框架是一个开源的轻量级Java开发框架,主要用于简化企业级应用的开发工作。它提供了全面的基础架构支持,包括但不限于依赖注入(Dependency ...

    SSM模式学习路线-----[Spring入门笔记](csdn)————程序.pdf

    【Spring入门笔记】主要介绍了Spring框架的基础知识,包括Spring的核心概念、Bean的配置与作用域、依赖注入、SpringAop和SpringJdbc,以及事务声明。以下是对这些知识点的详细说明: 1. **什么是Spring?** Spring...

    spring笔记.rar

    《Spring框架深度解析——基于传智播客左慈老师培训笔记》 在Java开发领域,Spring框架无疑是最具影响力和广泛使用的轻量级框架之一。它以其强大的功能、灵活的设计和丰富的生态系统,成为了企业级应用开发的首选。...

    spring学习笔记

    本文将深入探讨Spring框架的基础知识,主要包括Spring入门、IOC实现原理以及依赖注入的实践。 首先,Spring入门涉及的主要概念是IOC(Inversion of Control,控制反转)。IOC是指应用不再负责对象的创建和管理,...

    Spring学习笔记

    ### Spring学习笔记——系统测试模块知识点详解 #### 一、软件质量 软件质量是衡量软件产品能否满足用户期望的关键指标之一。本章节将详细介绍软件质量的相关概念及其特性。 ##### 1. 质量定义 软件质量是指软件...

    我的Pro Spring 学习笔记 之二 控制反转(IoC)和依赖注入(DI), Spring初步

    在本文中,我们将深入探讨Spring框架的核心概念——控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)。这些概念是Spring框架的基础,对于理解和掌握Spring的使用至关重要。 首先,让...

    SSH学习笔记3 SSH学习笔记3

    SSH学习笔记3主要聚焦于三个Java企业级开发框架——STRUTS、SPRING和HIBERNATE的集成与应用。这三个框架是Java后端开发中非常重要的组件,它们各自负责不同的层面,共同构建了一个强大的MVC(Model-View-Controller...

    spring第一次课笔记

    本笔记将详细解析Spring框架的基础知识,帮助你更好地理解并掌握Spring的核心概念。 首先,我们需要了解Spring框架的主要模块: 1. **核心容器**:这是Spring框架的基础,包括BeanFactory和ApplicationContext。...

    ActiveMQ学习笔记(二) JMS与Spring

    在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...

    达内spring笔记代码

    - "note_ziliao"可能包含了更多关于Spring的学习笔记和资料,包括常见问题解答、案例分析和练习题,对于巩固理论知识和提升实践能力大有裨益。 通过以上各个阶段的学习,可以逐步理解并熟练运用Spring框架,为实际...

    JBOSS_Esb学习资料

    4. **Spring整合**:《JBoss_ESB学习笔记13——第十个ESB应用Spring_AOP.doc》和《JBoss_ESB学习笔记12——第十个ESB应用Spring_helloworld.doc》涉及到Spring框架与ESB的结合,Spring AOP(面向切面编程)在ESB中的...

Global site tag (gtag.js) - Google Analytics