文章目录
1.简介
Spring 是一个容器,可以管理对象,创建对象时自动注入值,开源框架,简化开发,不用创建对象,减少依赖,解耦。核心是IOC。
优点:非侵入式、可以整合其他框架、可以管理对象。
2.IOC
定义
控制反转(Inversion of control),不用自己new对象,由框架去创建,核心是反射机制。
DI(Dependency Injection)
依赖注入,spring通过DI实现了IOC
实现DI的三种方式
- 构造器注入
- setter方法注入
- 接口注入
3.spring的三种配置方式
1.xml
applicationContext.xml,配置bean,加载配置文件,获取spring容器,获取对象
<beans>
<bean id="myService" class="com.somnus.services.MyServiceImpl"/>
</beans>
2.基于 Java 配置的方式
@Configuration
public class AppConfig{
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
public static void main(String[] args) {
ApplicationContext ctx = new
AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
3.注解
@Autowired
@Qualifier(" ")
java自带的@Resource
=@Autowired+@Qualifier(" ")
4.bean的生命周期
- 通过构造器或工厂方法创建bean实例
- 为bean属性设置值,和对其他bean的引用
- 调用bean的init()
- 使用bean
- 容器关闭时,销毁bean,调用destroy()
拓展方法管理生命周期@PostConstruct、@PreDestroy
5.bean的作用域
- singleton:单例、默认
- prototype:多例
- request:一次请求后会被回收
- session:session过期后,bean会随之失效
- global- session
6.spring框架中的设计模式
- 代理模式:aop
- 单例模式:bean默认为单例模式
- 工厂模式:BeanFactory 用来创建对象的实例
7.SpEL(Spring Expression Language)
spring表达式
#{beanID.属性名}
8.组件扫描
只是配置了组件扫描,并不会创建类的对象,需要给类加注解
<context:component-scan base-package=" " />
常用注解
功能等效,语义不同,便于开发人员理解区分
@Component
@Controller
@Service
@Repository
9.AOP
面向切面编程,是oop的补充,通过预编译方式和运行期动态代理实现,可以将各部分的业务逻辑隔离,解耦,提高重用性和开发效率。
使用了设计模式中的代理模式
例子
日志
使用
切面:@Aspect
切点:@Pointcut
通知注解:
// JointPoint
@Before
@After
@AfterThrowing
@AfterReturning
// ProceedingJointPoint 是JointPoint的子接口
@Around
切面优先级:值越小,优先级越高
@Aspect
@Order(0)
@Aspect
@Component
public class Demo {
@Pointcut("excution(* com.dyn.demo.aop.*.*(..))")
public void excudeService(){}
@Around("excudeService()")
public Object doAround (ProceedingJoinPoint joinPoint) throws Throwable{
joinPoint.proceed();
}
}
10.事务
rollbackFor:指定回滚的异常类型
@Transactional