Core Container:核心容器
ADP:面向切面编程
Aspects:AOP思想实现
Data Accsee:数据访问
Data Integration:数据集成
Web:Web开发
Test:单元测 试与集成测试
核心概念
Ioc控制反转
对象的创建权有程序转移到外部
Spring提供Ioc容器,充当外部
Ioc容器负责对象的创建、初始化等一系列工作,被创建或管理的对象在Ioc中成为Bean
DI依赖注入
在容器中简历bean与bean之间的依赖关系的过程
IoC和DI
导入Spring坐标
定义Spring管理的类
创建Spring配置文件,配置对应的类作为Spring管理的bean
<bean id="xx" name="别名" class="xxx" scope="是否为单例"></bean>
初始化Ioc容器,通过容器或许bean
ApplicationContext ctx = new ClassPathApplicationContext("applicationContext.xml"); BookService bookService = (BookService) ctx.getbean("bookService"); xxx
删除业务层中使用new的方法创建的Dao对象
提供对应的set方法
public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; }
配置server和dao的关系
<bean> property标签表示配置当前bean的属性 name属性表示配置哪一个具体的属性 ref表示参照哪一个bean <property name="bookDao" ref="bookDao"/> </bean>
适用容器管理的bean
- 表现层对象
- 业务层对象
- 数据层对象
- 工具对象
实例化Bean的三种方式
构造方法
使用无参的构造函数
通过静态工厂创建对象
早期
通过实例工厂实例化Bean
早期+1
Spring基于第三种进行改良
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
public UserDao getObjectType() throws Exception {
return new UserDaoImpl();
}
public Class<?> getObjectType() {
return UserDao.class;
}
public boolean isSingleton() {
return true;//是否为单例(可省略)
}
}
使用FactoryBean实例化bean
<bean id="userDao" class="xxx"/>
bean的生命周期
使用配置控制
使用接口控制
依赖注入
setter注入
引用类型
在bean中定义引用类型属性并提供课访问的set方法
配置property标签ref属性注入引用类型对象
简单类型
在bean中定义引用类型属性并提供可访问的set方法
配置中使用property标签value属性注入简单类型数据
构造器注入
简单了解
依赖注入方式选择
强制依赖选择构造器
可选依赖使用setter
Spring推荐构造器
自己开发推荐setter
依赖自动装配(前面经典白学)
IoC根据bean所依赖的资源在容器中自动查找并注入bean
<bean id="bookDao" class="xxx" autowire="xxx"/>
加载properties文件
- 开启context命名空间
- 开启context空间加载properties文件
- 使用属性占位符&{}读取properties文件中属性
容器
获取Bean
使用bean名称获取
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
使用bean名称获取并指定类型
BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
使用bean类型获取
BookDao bookDao = ctx.getBean(BookDao.class);
纯注解开发
Java类代替Spring核心配置文件
@Configuration
@ComponentScan("xxx")
public class SpringConfig {
}
//加载配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("xxx.xml");
//加载配置类初始化容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
bean管理
bean作用范围
使用scope定义bean作用范围
@Repository
@Scope("singleton")
public class bookDapImpl implements BookDao {
}
依赖注入
自动装配
@Service
public class xx implements xxx {
@Autowired
@Qualifier("xxx")//使用@qualifier注解开启指定名称装配bean
private XXX xxx;
.
.
.
}
无需setter方法
建议使用无参构造方法创建对象
加载properties文件
@Configuration
@ComponentScan("xxx")
@PropertySource("classpath:xxx.xxx")
public class SpringConfig {
}
第三方bean管理
使用独立的配置类管理第三方bean
将独立配置类加入核心配置
1.注入式(推荐)
@Configuration
@Import({xxx})
public class SpringConfig {
}
第三方bean依赖注入
//简单类型注入
@Value("xxx")
private String xxx;
//引用类型注入秩序为bean定义形参方法即可,会自动装配
@Bean
public DataSource dataSource(BookService bookService){
.
.
}
Spring整合Junit
@Runwith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(class = SpringConfig.class)
public class BookServiceTest {
@Autowired
private BookService bookService;
@Test
public void testSave(){
}
}
AOP
AOP面向切面编程
作用:在不惊动原始设计的基础上为其进行功能增强
Spring理念:无侵入式
SpringAOP本质:代理模式
AOP核心概念
目标对象(Target):原始功能去掉共性功能对应的类产生的对象,无法直接完成工作
代理(Proxy):目标对象无法直接完成工作,对其进行功能回填,通过原始对象的代理对象实现
AOP工作流程
- Spring容器启动
- 读取所有切面配置中的切入点
- 初始化bean,判定bean对应的类中方法是否匹配到任意切入点
- 匹配失败,创建对象
- 匹配成功,创建原始对象(目标对象)的代理对象
- 获取bean执行方法(获取bean,调用方法执行,完成操作)
AOP切入点表达式
@Component
@Aspect
public class Myadvice {
@Pointcut("execution(void xx.xx.xx)")
private void pt(){}
@Before("pt()")
public void method() {
}
}
切入点:要进行增强的方法
切入点表达式:要进行增强的方法的描述方法
execution可表述接口的无参方法或者类的无参方法
切入点表达式标准格式:动作关键词(访问修饰符 返回值 包名.类/接口名.方法名(参数) 异常名)
execution (public User com.xxx.xxx.xxx(int))
动作关键字:描述切入点的行为动作
访问修饰符:public等,可省略
异常名:方法定义中抛出指定异常,可省略
可以使用通配符描述切入点,快速描述
- “*”:单个独立任意符号 ,可以独立出现,也可以作为前缀或者后缀的匹配符出现
- “..”:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写
- “+”:专用于匹配子类类型
AOP通知类型
- 前置通知
@Before
- 后置通知
@After
- 环绕通知
@Around
- 返回后通知
@AfterRetur ning
- 抛出异常后通知
@AfterThrowing
重点:环绕通知
public Object around(ProceedingJoinPoint pjp) throws Throwable{//强制抛出异常
System.out.println("before");
Object = ret pjp.proceed();//原始操作的返回值
System.out.println("After");
return ret;
}
AOP通知获取数据
获取参数
重点:环绕通知 ProceedingJoinPoint方法
AOP总结
Spring事务简介
事务作用:在数据层保障一些列的数据库操作同成功同失败
Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
事务角色
事务管理员:发起事务方
事务协调员:加入事务方
开启事务注解
@Transactional(xxx,xxx)
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~