Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持。Spring处理基础结构,因此您可以专注于应用程序。Spring使您能够从“普通的Java对象”(POJO)构建应用程序,并将企业服务非侵入性地应用于POJO。此功能适用于Java SE编程模型以及全部和部分Java EE。Sping中文api文档
目的:解决企业应用开发的复制性。
功能:使用基本的JavaBean代替EJB(开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构),并提供了更多的企业应用功能。
Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。
IOC技术介绍:
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。最常见的方式是依赖注入(Dependency Injection,简称DI)。通过控制反转(Ioc)的技术达到松耦合的目的。
Ioc就是将对象的创建权交给Spring容器,在需要的时候直接得到对象。
Spring提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性开发。业务逻辑就是管理商品的入库与出库,系统逻辑就是对商品入库和出库的日志进行统一记录,以及事务管理。
Spring包含并管理应用对象的配置和生命周期,这个意义上是一种容器。
Spring将简单的组件配置,组合成为复制的应用,这个意义上是框架。
Spring框架包含组织为约20个模块的功能。这些模块分为核心容器,数据访问/集成,Web,AOP(面向方面的编程),检测,消息传递和测试,如下图所示。
spring-core-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
在src目录下新建xml文件命名为官方推荐名字:applicationContext.xml并引入约束。
<?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.xsd">
<!-- bean definitions here -->
</beans>
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<beans>
<!--下面等同于UserServiceImpl userServiceImpl = new UserServiceImpl(),把对象实例放入了Spring容器中-->
<!--scope不写的话默认情况下是单态模式scope="singleton",声明scope="prototype",当前变成了原型模式-->
<bean id="userServiceImpl" class="com.spring.service.impl.UserServiceImpl"scope="prototype" ></bean>
</beans>
</beans>
当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:
其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。
如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。
所谓注入,可理解为对象的属性赋值
<beans>
<bean id="user" class="com.spring.pojo.User">
<!--给属性注入值:name映射pojo类中的属性名,value:指定要注入的值-->
<property name="sid" value="1"></property>
<property name="uname" value="张翰"></property>
<property name="pwd" value="123"></property>
<property name="spower" value="1"></property>
</bean>
</beans>
<beans>
<bean id="user" class="com.spring.pojo.User">
<!--通过构造器注入-->
<constructor-arg name="sid" value="11"></constructor-arg>
<constructor-arg name="uname" value="张三"></constructor-arg>
<constructor-arg name="pwd" value="321"></constructor-arg>
<constructor-arg name="spower" value="1"></constructor-arg>
<!--注入引用数据-->
<constructor-arg name="account" ref="account"></constructor-arg>
</bean>
<bean id="account" class="com.spring.pojo.Account">
<constructor-arg name="aid" value="1"></constructor-arg>
<constructor-arg name="money" value="1200"></constructor-arg>
</bean>
</beans>
接口注入(知道有这种注入,现在很少使用)
扩展注入(c命名和p命名空间注入)
需要导入依赖
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
c命名空间注入就是构造器注入的快捷方式
<bean id="user2" class="com.aop.demo01.pojo.User" c:_0="peter" c:_1="23"></bean>
p命名空间注入就是set注入的快捷方式
<bean id="user" class="com.aop.demo01.pojo.User" p:age="12"></bean>
注意:pojo实体类中必须含有对应的构造方法
域属性自动注入(byName\byType;局部和全局配置)
autowire="byName"default-autowire="byType"
<!--<bean id="user" class="com.spring.pojo.User" autowire="byType"> 局部根据类型自动注入-->
<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
https://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName"<!--全局配置配置自动注入-->
>
环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar), 添加context约束头信息(组件扫描器)
常用注解:@Component,表示当前修饰的类交给Spring容器管理
修饰一个类,将这个类交给Spring管理。与@Component相同功能的还有三个衍生注解,都是用来修饰类:
@Repository:添加在Dao实现类上。
@Service:添加在Service实现类上。
@Controller:添加在Controller类上。
@Value:给属性的基本数据类型赋值,可以放在属性上,页可以放在属性的set方法上。
@Scope:指定类是单态模式还是原型模式。
@Autowired : 设置对象类型的属性的值。但它是按照对象的类型来注入,跟注解的名字无关。
@Resource : 完成对象类型值的注入,按照名字注入。
再增加四个包:
mybatis-spring-1.2.3.jar (mybatis与spring的整合包)
spring-jdbc-4.1.6.RELEASE.jar
依赖于:
spring-aop-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar 事务
原文:https://www.cnblogs.com/fufengxi/p/14592670.html