【Spring基础】——IoC,AOP
这里是引用
抛出几个问题:
控制反转是什么?
什么是注入?
什么是面向切面编程
什么是事务管理?
什么是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即可实现事务
?
原文:https://blog.51cto.com/u_15202146/3026774