Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核.Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
方便解耦,简化开发
通过 Spring提供的 IoC容器,可以将对象间的依赖关系交由 Spring进行控制,避免硬编码所造
成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可
以更专注于上层的应用。
AOP 编程的支持
通过 Spring的 AOP 功能,方便进行面向切面的编程,许多不容易用传统OOP 实现的功能可以
通过 AOP 轻松应付。
声明式事务的支持
可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,
提高开发效率和质量。
方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可
做的事情。
方便集成各种优秀框架
Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz
等)的直接支持。
低 降低 JavaEE API 的使用难度
Spring对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的
使用难度大为降低。
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.0.2.RELEASEversion>
dependency>
<bean id="accountService" class="com.cc.service.impl.AccountServiceImpl"
scope="prototype" init-method="init" destroy-method="destroy">bean>
基于注解
添加context约束
<context:component-scan base-package="com.cc">context:component-scan>
把当前对象存入spring容器,和标签功能一样,value用于指定id,默认值当前类名,且首字母小写,四个功能一样
@Component
@Controller 用于表现层
@Service 用于业务层
@Repository 用于持久层
//和生命周期相关
//他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
//PreDestroy
//作用:用于指定销毁方法
//PostConstruct
//作用:用于指定初始化方湖
@Scope()
//指定bean的作用范围
//value 指定范围取值 singleton单例 prototype多例 默认单例
<bean id="accountService" class="com.cc.service.impl.AccountServiceImpl">
<constructor-arg name="name" value="cc">constructor-arg>
<constructor-arg name="age" value="18">constructor-arg>
<constructor-arg name="birthday" ref="now">constructor-arg>
直接写日期的话无法识别为日期格式,识别为字符串格式
bean>
<bean id="now" class="java.util.Date">bean>
<bean id="accountService2" class="com.cc.service.impl.AccountServiceImpl2">
<property name="name" value="TEST" >property>
<property name="age" value="21">property>
<property name="birthday" ref="now">property>
bean>
<bean id="accountService3" class="com.cc.service.impl.AccountServiceImpl3">
<property name=" mySet">
<set>
<value>AAAvalue>
<value>BBBvalue>
<value>CCCvalue>
set>
property>
<property name="myStrs">
<array>
<value>AAAvalue>
<value>BBBvalue>
<value>CCCvalue>
array>
property>
<property name="myList">
<list>
<value>AAAvalue>
<value>BBBvalue>
<value>CCCvalue>
list>
property>
<property name="myProps">
<props>
<prop key="testC">cccprop>
<prop key="testD">dddprop>
props>
property>
<property name="myMap">
<map>
<entry key="testA" value="aaa">entry>
<entry key="testB">
<value>BBBvalue>
entry>
map>
property>
bean>
//@Autowired
//自动按照类型注入,和功能一致,只要容器有一个bean对象和要注入的类型匹配,
// 就可以了注入,可以写在变量上,也可以写在方法上,如果有两个bean对象和注入类型一致,则找变量名相同的,若没有报错
//@Qualifier(“accountDao”)
//按照类型基础上,安名称注入,给类成员注入不能单独使用,要配合autowrite使用,给方法参数注入时可以
//value用于指定注入bean的id
@Resource(name = “accountDaoImpl”)
//按照bean的id注入
//name用于指定id
// 集合类型注入只能通过xml实现
@Value("")
//注入基本类型和String类型
//value指定数据的值,可以使用spring的el表达式 ${表达式}