**为何要使用spring
至少在我看来,在项目中引入spring立即可以带来如下好处:
* 降低了组件之间的耦合度,实现软件各层之间的接耦。
* 可以使用容器提供的众多服务,如:事务管理服务、消息服务等。
* 容器提供单例模式支持,开发人员不再需要自己编写实现代码。
* 容器提供了AOP技术,利用它很容易实现如:权限拦截、运行期监控等功能。
* 容器提供了众多的辅助类,使用这些类能够加快应用的开发:如:JdbcTemplate、HibernateTemplate
* Spring对于主流的应用框架提供了集成支持,如:集成hibernate JPA Struts等。
1、必须的jar包
dist\spring.jar
lib\jakarta-commons\commons-logging.jar
如果使用了切面编程(AOP),还需要下列jar文件
lib/aspectj/aspectjweaver.jar和aspectjrt.jar
lib/cglib/cglib-nodep-2.1_3.jar
如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,还需要下列jar文件
lib\j2ee\common-annotations.jar
注:JSR(Java 规范请求)是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR(Java 规范请求),以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准
2、Spring的配置文件模板
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
.....
</beans>
3、实例化Spring容器
方法一:
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
方法二、
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\beans.xml“});
4、三种实例化bean的方式
******** 使用类构造器实例化
<bean id="personService" class="cn.wangjie.bean.impl.PersonServiceImpl"/>
******** 使用静态工厂方法实例化
<bean id="personService" class="cn.wangjie.factory.PersonServiceFacotry" factory-
method="createPersonService"/>
public class PersonServiceFactory{
public static PersonService createPersonService(){
return new PersonServiceImpl();
}
}
********使用实例化工厂方法实例化:
<bean id="personServiceFactory" class="com.wangjie.factory.PersonServiceFactory"/>
<bean id="personService" factory-bean="personServicefactory" factory-method="createPersonService"/>
public class PersonServiceFactory{
public PersonService createPersonService(){
return new PersonServiceImpl();
}
}
5、bean的作用域 <bean id="" class="" scope="singleton/prototype"/>
****.singleton(默认)
在每个Spring IoC容器中一个bean定义只有一个对象实例(共享)。
默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:
<bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:
<beans default-lazy-init="true“ ...>
****.prototype
允许bean可以被多次实例化(使用一次就创建一个实例)
指定Bean的初始化方法和销毁方法(下面初始化时调用类中的setup方法,销毁是调用teardown方法)
<bean id=“foo” class=“...Foo”
init-method=“setup”
destory-method=“teardown”/>
6、IOC inversion of control 控制反转
所谓的控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器(Spring容器xxx.xml)负责的,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性。
<bean id=" " class=" "/>
7 DI dependency injection 依赖注入
所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
****使用构造器注入
****使用属性setter方法注入
****使用Field注入(用于注解方式)
注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,
手工装配依赖对象,在这种方式中又有两种编程方式
* 在xml配置文件中,通过在bean节点下配置
* 在java代码中使用@Autowired或@Resource注解方式进行装配
通过setter方法注入依赖
* 简单bean配置
配置bean的简单属性,基本数据类型和String。
<bean id="personService" class="com.itcast.bean.impl.PersonServiceImpl">
<!-- 基本类型,string类型 -->
<property name="age" value="20"></property>
<property name="name" value="张无忌"></property>
</bean>
* 引用其它bean
<bean id="person" class="com.itcast.bean.Person" />
<bean id="personService"
class="com.itcast.bean.impl.PersonServiceImpl">
<!-- 引用类型 -->
<property name="person" ref="person" />
</bean>
* 内部bean
<bean id="personService" class="com.itcast.bean.impl.PersonServiceImpl">
<!-- 内部bean注入 -->
<property name="personClass">
<bean class="com.itcast.bean.PersonClass" />
</propert>
</bean>
这种方式的缺点是你无法在其它地方重用这个personClass实例,原因是它是专门为personService而用。
* 装配集合
若bean的属性是集合类型,按如下处理:
A、装配List和数组:list中可以由重复值
<!-- 装配list -->
<property name="lists">
<list>
<value>list1</value>
<value>list2</value>
<ref bean="person"/>
</list>
</property>
<!-- 装配数组 -->
<property name="obj">
<list>
<value>obj1</value>
<value>obj2</value>
<ref bean="person"/>
</list>
</property>
* 装配集合
B、 装配set set中不可以有重复值。
<!-- 装配set -->
<property name="sets">
<set>
<value>set1</value>
<value>set2</value>
<ref bean="person"/>
</set>
</property>
set使用方法和list一样,不同的是对象被装配到set中,而list是装配到List或数组中装配
* 装配集合
C、 装配map:
<!-- 装配map-->
<property name="maps">
<map>
<entry key="01">
<value>map01</value>
</entry>
<entry key="02">
<value>map02</value>
</entry>
</map>
</property>
map中的<entry>的数值和<list>以及<set>的一样,可以使任何有效的属性元
素,需要注意的是key值必须是String的。
* 装配集合
D、装配Properties:
<!--装配Properties -->
<property name="props">
<props>
<prop key="01">prop1</prop>
<prop key="02">prop2</prop>
</props>
</property>
*装配集合
E、设置null:
<!-- 装配null -->
<property name="listnull">
<null/>
</property>
通过构造函数注入依赖
通过参数的顺序:
<constructor-arg index="0">
<value>张三</value>
</constructor-arg>
<constructor-arg index="1">
<value>56</value>
</constructor-arg>
通过参数的类型:
<!-- 通过参数的类型 -->
<constructor-arg type="java.lang.Integer">
<value>56</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>张三</value>
</constructor-arg>
相关推荐
Spring总结
包含Spring简介,AOP,SpringMVC,集成JDBC,事务,ORM框架,Spring集成知识点总结,以思维导图的形式展示,xmind文件。
标题中的“spring总结”指的是对Spring框架的全面回顾和总结,Spring是Java开发中最广泛应用的轻量级框架,尤其在企业级应用开发中占据主导地位。这篇总结可能涵盖了Spring的核心特性、工作原理以及最佳实践。 描述...
Spring个人总结,基于Annotation注解的方式开发,配置
spring总结1可以查看
三大框架里的spring总结,希望对各位有用。
spring入门笔记
在这个“狂神说”系列的Spring源码总结中,我们可以深入理解Spring的核心概念和实现机制。 1. **依赖注入(DI)与控制反转(IoC)**:Spring的核心特性是依赖注入,它通过反转应用程序对对象的控制权,使得对象的创建和...
【总结】 Spring 框架是一个全方位的解决方案,它不仅提供了一种管理对象生命周期和依赖关系的有效方式,还简化了事务处理、持久层操作和Web应用的开发。通过使用Spring,开发者可以构建出更加模块化、易于测试和...
【Spring 框架概述】 Spring 是一个广泛应用于企业级 Java 开发的开源框架,由 Rod Johnson 创建,旨在简化 Java EE 应用的复杂性。它以轻量级、低侵入式的设计理念,提供了全面的解决方案,涵盖从表现层到业务逻辑...
Spring5思维导图
文章目录Spring总结Spring容器控制反转(IoC)基于XML的IoC Spring总结 Spring容器 什么是Spring容器 从概念上讲:Spring 容器是 Spring框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们...
spring方面介绍 常用注解 生命周期 AOP DI
### Spring框架概述与基本配置 #### 一、Spring框架简介 Spring框架是一个开源的企业级Java应用框架,由Rod Johnson创建并由Pivotal Software提供支持。Spring提供了全面的基础架构支持,使得开发者能够专注于应用...
Spring框架是Java开发中最广泛应用的轻量级框架之一,它以其IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心特性,极大地简化了企业级应用的开发。这份"Spring思维...