什么是Spring?
Spring是管理bean生命周期的轻量级容器,是一个开放源代码的设计层面框架
Spring包括什么?
Ioc
1.控制反转,是一种设计思想,就是原本在程序中需要手动创建对象的权利,交给spring框架管理
2.Ioc容器是实现Ioc的载体,Ioc容器实际上就是个Map(key,value),map中存放各种对象
3.Ioc容器就像一个工厂一样,当我们需要创建一个对象时,只需要配置好配置文件或贴注解即可,
完全不用考虑对象时如何被创建出来的
DI:
1.指 Spring 创建对象的过程中,将对象依赖属性通过配置设值给该对象
Spring AOP
AOP利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
Idea中spring环境搭建
1.在Pom.xml中添加
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.version>4.2.5.RELEASE</spring.version>
</properties>
<!--Spring核心基础依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<!--日志相关-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--测试相关-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.新建applicationContext.xml配置bean
<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">
</beans>
bean的配置
1.set方法注入
<bean name="userDao" class="com.tledu.spring.dao.impl.UserDaoImpl" />
<!--name 属性名字/ ref引用的bean的名字-->
<bean id="userService" class="com.tledu.spring.service.UserService">
<property name="userDao" ref="userDao" />
</bean>
需要写被引用的@setter方法
2.通过构造器
<bean name="userDao" class="com.tledu.spring.dao.impl.UserDaoImpl" />
<bean id="userService" class="com.tledu.spring.service.UserService">
<constructor-arg ref="userDao"/>
</bean>
3.普通属性注入
<property name="testStr" value="good"/>
<property name="testNum" value="82"/>
<property name="lists" >
<list>
<value>李白</value>
<value>杜甫</value>
</list>
</property>
<property name="sets">
<set>
<value>1</value>
<value>2</value>
</set>
</property>
<property name="maps">
<map>
<entry key="1" value="李白"/>
<entry key="2" value="杜甫"/>
</map>
</property>
4.Autowire自动装配
byName:需要保证所有bean的id唯一
byType:需要保证所有的bean的calss唯一
配置好后,通过ClassPathXmlApplicationContext的getbeen方法读取配置
scope
默认是singleton,单例模式
prototype,简单来说,就是每次获取都创建一个新对象,并且这个对象的生命周期不归Spring管理.
spring没有生命周期,但是可以在bean中通过 init-method(init)destroy-method(destroy)定义在实例化前后执行什么方法
迟加载
如果我们不想让某个类在解析的时候就创建对象,而是用到的时候在创建对象的话,就需要设置迟加载
<bean name="userDao" class="com.tledu.zrz.dao.impl.UserDaoImpl" >
<bean id="userService" class="com.tledu.zrz.service.UserService" scope="prototype"
autowire="byName" init-method="init" destroy-method="destroy" lazy-init="true" >
</bean>