今天学习了spring框架的架构,下面是整理spring的知识。
一.spring框架概述:
概述: 为了解决项目中各层之间的松耦合问题(起到组件之间的粘结作用). 开源框架.
官网: www.spring.io 版本 : 3.x 4.x(建议) 5.x

好处:
1.不依赖于应用服务器.
2.IOC(控制反转)技术实现组件控制.
通过DI(依赖注入)技术提高了组件之间的解耦.
3.通过AOP(面向切面编程)技术实现安全、事务、日志功能的统一管理,
提高复用.
4.Spring框架可以几乎与其他任何框架进行良好的整合使用.
5.Spring所有项目之间不相互依赖.

二.编写第一个Spring项目:
第一个Spring程序: 简单实现第一个IOC控制(对象的生命周期控制).
1.创建项目.导入jar包.
2.IOC : 对象的创建,交由Spring容器完成.
Spring容器创建.applicationContext.xml
3.创建实体类, 将类实例的创建交给Spring容器.

4.测试Spring容器启动, 并创建得到对象.
ApplicationContext context = new ClassPathXmlApplicationContext(“容器”);
Object o1 = context .getBean( 名称 );

三.IOC和DI :
IOC : 控制反转. 本质: 将手动创建对象的工作,交给Spring容器实现完成.
1.在Spring容器中可以配置创建实例对象.无论带参,无参构造实例都是可以实现的.
Spring.xml容器中配置:

2.如何通过注解的用法代替Spring配置文件中的写法.实现IOC控制.
2.1: 首先需要在实体类中: 采用注解.
@Component , @Controller , @Service , @Repository
2.2: 基于spring容器配置注解的扫描和支持.
<context:component-scan base-package=“父包”>

切记 : 当采用IOC注解的方式进行对象的创建,在没有指定对象名的情况下,默认生成对象名称: 类名称首字母小写作为: 默认的对象名.

DI : 依赖注入.含义 : 指的是针对实体类中: 属性成员赋值操作.
1.针对实体中的属性实现注入: 采用容器配置写法实现.
1.1:类中依赖的属性: 必须get/set封装.
1.2:进行注入:
2.属性的注入: 也可采用注解的写法实现.
//无需提供属性的get/set封装方法实现注入.
@Resource(name=”对象名”) //根据对象名称进行spring容器查找,并注入.
Private BanJi bj1;
@Autowired //根据类型进行spring容器查找,找到指定类型对象,直接注入.
Private BanJi bj1;

案例: ioc + di 实现以下功能.
1.采用spring容器完全配置的写法实现分层开发与调用.
2.采用spring容器注解的写法实现分层开发与调用.

四.AOP技术:
面向切面概述:
切面的原理: 将 业务操作 与 安全,日志,事务 结合使用的过程称为面向切面编程.
静态代理: 是一种编程方法. 对原有功能进行功能增强.
动态代理: 就是将代理类与代理功能进行拆分编写的一种方式.
方式一:
根据jdk的动态代理接口实现 : InvocationHandle实现动态代理.
Object o1 = Proxy.newProxyInstance();
方式二: spring默认切面使用方式.
Cglib插件实现的动态代理.

切面的一些概念:
目标类: 用户需要调用的业务功能类.类中:有目标方法.
切面: 代理类.
通知: 代理类中额外功能.分类: 前置,后置,环绕,返回值,异常处理等.
切入点: 代理类明确 代理谁的 规则.
织入: 将代理功能 + 目标功能 组织到一起.

第一个AOP 程序的实现:
2.1:实现方式一,基于applicationContext.xml核心配置实现.
案例: 实现service 新增用户实现事务的控制.
步骤:
1.面向切面的AOP技术,需要额外的补充jar.
aspectjrt.jar / aspectjweaver.jar
cglib-nodep-2.1_3.jar/aopalliance.jar

2.编写目标类与目标方法.
			3.编写切面 , 和切面中的通知.
			4.在spring容器中,将目标与切面进行织入.注:织入时,指定切入点.
			5.测试访问目标类中的目标方法.是否进行增强成功.

			

2.2:实现方式二,基于注解实现.aop动态代理.

五.Spring框架与hibernate 框架的整合:

1.Spring框架与jdbc实现整合:
		1.1: 引用spring的jar + 驱动包 + dbcp数据源,pool.jar.
		1.2: 数据源对象的创建:  交给spring容器完成.
				<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource">
					//配置四个连接属性...
				</bean>
		1.3: 如何编写dao层(核心: 需要根据dataSource进行增删改查).
				private JdbcTemplate jdbcTemplate;

				@Autowired
				public void setDataSource(DataSource dataSource){
					this.jdbcTemplate = new JdbcTemplate( dataSource);
				}

				增删改查: this.jdbcTemplate.update() /queryForObject() / query()...

		1.4:编写测试类:测试使用.

3.Spring与Hibernate框架整合使用:

3.0: 集成spring与hibernate,将所有jar包进行引入.
		spring+ hibernate +(spring-hibernate)+ dbcp.jar,pool.jar,驱动.jar

	3.1: 如何控制数据库的连接.dataSource --->  sessionFactory.
	
	3.2: 如何让dao层操作数据库.
		方式一:dao层继承父类 : HibernateDaoSupport.
		方式二:在spring容器中对dao层进行sessionFactory工厂属性的注入.


	3.2: 如何给service层增加事务控制.
		在spring容器中通过事务管理器,创建事务通知. 通过面向切面编程进行动态代理使用.