这里是引用

抛出几个问题:

控制反转是什么?
什么是注入?
什么是面向切面编程
什么是事务管理?
什么是jdbcTemplate

控制反转

操作容器而不是对象,控制权的反转
三种获得注入bean的方式。【getBean方法的重载,但最常用的还是直接根据name、id来获取Bean的实例
因为spring在加载配置的时候就初始化了,所以我们需要在配置的之前告诉spring容器应该怎么去注入
两种办法:
【1】构造器参数 设置 索引和值 or 参数名称和值
【2】属性设置 调用set解析的方法名称和值

Aware接口

实现类来实现(提高spirng的耦合度)

【AOP】 面向切面编程是面向对象思想的补充。动态增强功能是依赖于Java的代理模式实现的。

日志、事务、数据库操作

切入点(Pointcut) =
通知(advice增强)=
切面(Aspect)=

AOP的实现:

JDK动态代理实现:

【1】导jar包
【2】名称空间spring注解配置:需要context
【3】开启Spring的注解扫描功能,component-scan
【4】AOP == 目标对象类(不完整的功能)+通知类(抽取共性功能)
【5】类上面有@Component指定id(advice、target)、@Aspect加在通知类上面;方法使用的是@Before(value=“excute(..asp)”)

五种通知

JdbcTemplate(介于原生JDBC和hibernate框架之间的)

依赖的jar包:
  spring管理jdbc
  spring的上下文
  mysql公司连接java包(mysql的驱动)

1. 用Java配置实现

【1】管理数据源使用的是DriverManagerDataSource把datasource装好
【2】jdbcTemplate模板返回一个新的JdbcTemplate(都由bean管理)
【3】Java实现比较简单,先用AOP的Before前置注解加载dataSource,然后再在实例中使用jdbcTemplate进行操作(update、query方法)
【4】query可以映射某个对象,BeanPropertyRowMapper(XXModel.class)

Before注解加载dataSource的方法:(AnnotationConfigApplicationContext注解配置)
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(javaConfig.class);
jdbcTemplate = ctx.getBean(JdbcTemplate.class);

2. XML配置

就是普通的dataSource数据源配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="mysql公司的jdbc连接驱动" />
	<property name="url" value="协议://域名:端口号/项目名称" />
	<property name="username" value="rooottt" />
	<property name="password" vlaue="mysql" />
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">

jdbc引用dataSource作为dataSource

事务

spring中的事务是利用 【Aop思想】 简化事务配置(Java/XML实现)
大家的交易遇到错误之后可以顺利回滚到未交易状态,大家都没有因为这个意外而损失。

1. XML中

<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
	<property name="dataSource" ref="transactionManager">
</bean>
<tx:advice id="txAdvice" transactionManager> 
	<tx:attributes>
		<tx:method name="update*" />
		<tx:method name="add*" />
		<tx:method name="insert*" />
		<tx:method name="delete*" />
	</tx:attributes>
<tx:advice>

<aop:config>
	<aop:pointcut id="cp1" expression="execution(* org.javaboy.jdbc.AccountService.*(..))" />
	<aop:advisor advice-ref="txAdvice" pointcut-ref="pc1" />
</aop:config>

2. Java方法使用事务

直接在updateMoney上面加上@Transaction即可实现事务