1.IOC,控制反转
本质上提供一个类的全限类名,由Spring通过反射创建对象
Spring-bean,调用的是本身的空参构造器
bean标签的相关使用,属性有id,class,name,scope
1.1 DI,依赖注入
set方法注入
property标签
构造器方法注入
constructor-arg标签
根据参数名字
根据参数位置,索引
根据参数类型,类型相同的按照顺序注入
命名空间注入:实际就是Set方法和构造器方法的简写,需要引用命名空间
p:
c:
工厂方法是注入:核心是工厂的产品,而不是本身的工厂对象
静态工厂:
工厂类中有一个静态方法返回产品对象,获得产品对象时不需要工厂对象。只需要配置factory-method
实例工厂:
工厂类中有一个实例对象返回产品对象,获得产品对象时需要工厂对象,所以配置的时候要先配置工厂bean在配置产品bean,提供factory-method
集合属性的注入
array
list
set
map
properties
tips:在spring的配置文件xml中,引用值用value,引用bean对象用rtef标签或者属性
2.AOP,面向切面编程
2.1代理模式
目标对象负责执行核心功能(target)
代理对象负责对原有的目标对象的核心功能进行补充和增强(proxy)
静态代理:在程序编译之前写好对应的目标类的代理类,产生代理对象
动态代理:程序运行阶段,利用字节码技术动态产生代理类对象。
JDK动态代理:proxy的newInstance,三个参数分别为目标类的类加载器,目标类的接口和匿名内部类实现的InvocationHandler(主要使用于用接口实现的目标类)
CGILI动态代理:Enhancer,代理类主要产生于目标类的子类对象,直接使用子类中重写并增强的方法
2.2Spring的aop就实现了动态代理
切面:公共的代码块
连接点:需要放入的方法
切入点:一组连接点的结合
织入;将切面放入的过程
通知:前置,后置,环绕,异常,最终
2.3aop的配置
xml配置
引入aop的命名空间和xsd
配置切面类的bean
aop:aspect
aop:config
aop:pointcut
aop:advice
aop:before
aop:after-ruturning
aop:after
aop:thorwable
aop:around
注解配置
@Aspect
@Component
@pointcut
@before()
2.4aop对于事务的配置
事务的属性
传播行为
隔离级别
是否可读
超时时间
回滚规则
xml配置
引入spring-tx的命名空间和xsd
tx:transaction-manager
tx:advisor
一般配置完事务管理器后,需要织入到指定方法,和aop连用
注解配置
在service层上添加@Transactional
3.sprig和jdbc的结合使用(java项目)
jdbcTemplate
核心思路
配置数据源的bean
配置jdbctemplate的bean
配置事务管理器的bean
4spring和mybatis的结合使用(java项目)
SqlSessionFactoryBean的配置
核心思路
配置数据源的bean
配置SqlSessionFactory的bean
配置事务管理器的bean
// 配置datasource
@Bean
public DataSource dataSource() {
DruidAbstractDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setInitialSize(Integer.parseInt(initialSize));
dataSource.setMaxActive(Integer.parseInt(maxActive));
return dataSource;
}
// 配置sqlsessionfactorybean
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(){
// 定义一个资源解析器,主要为了解析xml文件
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean s = new SqlSessionFactoryBean();
s.setDataSource(dataSource());
s.setTypeAliasesPackage("com.briup.myabtisAnnotation.bean");
try {
s.setMapperLocations(resolver.getResources("classpath:com/briup/myabtisAnnotation/mapper/*Mapper.xml"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
// 配置platformtransactionmanager
@Bean
public PlatformTransactionManager transactionManager() {
DataSourceTransactionManager tx =
new DataSourceTransactionManager();
// 把数据源注入到事务管理器里
tx.setDataSource(dataSource());
return tx;
}
5.spring和web(servlet)的结合使用(web项目)
架构 spring+mybatis+servlet
核心配置思路,spring和mybatis的配置和上面一样
主要注意web.xml的配置,需要在web.xml中声明一个监听器,用来加载文件和配置类,第二个注意的点,要从spring容器中取出servlet对象
webApplicationContext
xml配置
注解配置
6.三层架构中的配置
bean包下的注解@Data
dao包下的注解,如果使用的是mybatis,dao包是由框架管理的不需要添加任何注解,如果不使用mybatis需要在dao层实现类上添加@Repository
service包下的注解,要在impl的类上添加@Service,同时在类的内部,@Autowired dao层对象
web包下的注解,servlet一般没有,如果使用的是mvc@Controller,在类的内部添加@Autowired service对象