欢迎加入it技术交流群内部有丰厚的程序相关的书籍,CSDN里面需要下载的也可以联系,基本大部分的书我已经下载下来了 ,还有各种资料,欢迎加q裙+ :638809320
Spring :
储存bean对象的容器
spring是一个轻量级的控制反转(ioc)和面向切面(AOP)的容器框架。
####好处:
方便解耦
- Spring就是一个大工厂,专门负责生成Bean对象,可以将对象创建和依赖关系维护由Spring管理
Aop编程的支持
- Spring提供面向切面编程,可以方便的实现程序进行权限拦截、运行监控等功能
声明式事务的支持
-
只需要通过配置就可以完成对事务的管理,而无需手动编程
-
Spring对Junit支持,可以通过注解方面的测试Spring程序
方便集成各种优秀框架
- Spring 不排除各种优秀的开源框架,其内部提供了各种优秀款那个价的支持 (Struts、Hibernate、mybatis等)
降低JavaEE API的使用难度Spring:
- 对JavaEE 开发中一些难用的API提供了封装,使用这些API应用难度大大降低。(JDBC、JavaMail等)
##Spring入门
spring.io下载对应的jar包
###Spring核心jar包
- Spring-core-3.2.2.RELEASE.jar
包含Spring框架基本的核心工具类,Spring其他组件要都使用到这个包里的类,是其他组件的基本核心 - Spring-beans-3.2.2.RELEASE.jar
所有应用都要用到,他包含访问配置文件、创建和管理bean 以及进行inversion of Control(ioc)、dependency injection(DI)操作相关的所有类 - Spring-Context-3.2.2.RELEASE.jar
Spring 提供在基础IOC功能上的扩展服务,此外还提供许多企业级服务的支持 如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图框架的封装等 - Spring-expression-3.2.2.RELEASE.jar
Spring 表达语言 - com.Springsource.org.apache.commons.logging-1.1.1.jar
第三方的主要用于处理日志
###入门案例
pom.xml依赖配置
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
接口
package com.fnuo.dao;
public interface UserMapper {
void sayHello();
}
实现类
package com.fnuo.dao.impl;
import com.fnuo.dao.UserMapper;
public class UserMapperImpl implements UserMapper {
public void sayHello() {
System.out.println("第一次使用Spring hello world");
}
}
测试类
import com.fnuo.dao.UserMapper;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test() {
//加载beans.xml配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//从Spring容器获取对象
UserMapper service = (UserMapper) context.getBean("userService");
//调用方法
service.sayHello();
}
}
beans.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 id="userService" class="com.fnuo.dao.impl.UserMapperImpl"></bean>
</beans>
##ioc
ioc : inverse of control 控制反转的概念:
将原来在程序中手动创建UserService对象的控制权限,交由Spring框架管理,简单说,就是创建UserService 对象控制被反转到了Spring框架
##DI解释
DI:dependency injection 依赖注入 在Spring框架负责创建bean对象时,动态的将依赖对象注入到bean组件。
##Spring容器加载有三种方式
- ClassPathXmlApplication: 类路径
- 文件西永路径获得配置文件:FileSystemXMLApplicationContext
- 使用BeanFActory:XMLBeanFactory:
###Spring内部创建对象原理
- 解析xml文件,获取类名,id,属性
- 通过反射,用类型创建对象
- 给创建的对象赋值
###BeanFactory与ApplicationContext对比
BeanFactory:延时加载,第一次getbean时才会初始化bean
ApplicationContext:即时加载
ApplicationContext是对BeanFactory扩展,提供更多功能
- 国际化处理
- 事件传递
- bean自动装配
- 各种不同应用层的context实现
###装配bean的三种方式
- new实现类
- 静态工厂方法
- 通过实例工厂方法
###bean的作用域
- singleton:在Spring ioc容器中仅存在一个bean实例,bean以单例方式存在,默认值
- prototype:每次从容器中调用bean时,都返回一个新的实例,即每次都调用getbean()时,相当于执行new XxxBean()
###bean的生命周期
- instantiate bean对象实例化
- populate properties 封装属性
- 如果Bean实现BeanNameAware 执行 setBeanName
- 如果Bean实现BeanFactoryAware 执行setBeanFactory ,获取Spring容器
- 如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
- 如果Bean实现InitializingBean 执行 afterPropertiesSet
- 调用 指定初始化方法 init
- 如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
执行业务处理 - 如果Bean实现 DisposableBean 执行 destroy
- 调用 指定销毁方法 customerDestroy
###SpEL:Spring 表达式
<property name="" vlaue="{#表达式}"
#{123}、#{'tom'}数字字符串
#{beanId}:应用另一个bean对象
#{beanId.参数名}:操作数据
#{beanId.方法名}:执行方法
#{T(类).字段|方法}:静态方法或字段
###Spring 注解
spring 默认情况下注解不生效
context:annotation-cofig/开启注解
<context:component-scan base-package=“包”>主街位置
1.@Component相当于代替
2.1 @Repository dao下类的注解
2.2.1 @Autowired @Service service下的注解 自动注 入XxxDao的值
2.2.2 @Qualifier //根据指定的id注入属性
3 @Controller Servlet下的注解
4.@scope //多例,默认单例
5. @PostContruct //相当于 -init-method
6. @PerDestroy //相当于 -destroy-method