Spring总结
IOC(Inversion of Control):反转控制;DI (Dependency Injection)依赖注入🔗 🔗
反转控制将对象的创建控制权交由Spring容器,并管理其的生命周期,创建模式(单例 or 多例);依赖注入,创建和管理某个对象,其依赖于那些属性,为属性赋值就是注入。
Spring配置文件中每一个bean都代表一个对象,获取Spring容器需要通过ApplicationContext接口的实现类ClassPathXmlApplicationContext的构造方法,加载Spring的配置文件(Spring的配置文件有默认的名字和位置,在WEB-INF文件下,名为applicationContext.xml)。
bean的作用域,生命周期,以及引用外部文件。
自动装配(两种方式实现:XML和注解):在Spring容器中找到一个bean,然后通过某种方式,自动的为当前对象的非字面量属性赋值。前提是能找到一个对象来赋值(两种方式byName,byType,但都不用)。
四个注解:@Component,@Repository,@Service,@Controller。如果需要Spring管理哪一个对象,只需要在对象所属类上加上四个注解之一,经过扫描,就可以将这些类作为组件在Spring中加载,并以类名首字母小写为id(也可以通过注解自定义id)。组件就是Spring所管理的一个bean。
@Autowired注解,组件自动装配,只针对于其标识的的最小应用单位,默认按照byType,然后找不到再byName。属性:required来表示是否允许不被设置。@Qualifier注解表示指定注入bean的id。
AOP(🔗):面向切面编程(将业务和非业务公共功能分开,将业务功能实现中的一些非业务代码抽取出来,用一个切面(类)进行保存,切面中设置为通知(方法),然后通过切入点表达式作用到连接点)
OOP:面向对象编程,Java的核心原理(纵向继承)
两者是相互补充的关系
横切关注点:抽取出来的公共功能或者非业务代码
切面:存放横切关注点的类
通知:横切关注点放在切面中后的方法
连接点:切面作用于目标对象的位置:前,后,返回,异常,(环绕,前四种的组合)。
切入点:切面作用于连接点的条件,其实就是切入点表达式。
如何写AOP:
1)AspectJ(🔗): Spring AOP是一种思想,而AspectJ是一种直接体现。AspectJ使用的是注解的方式。
①首先在Spring的配置文件中配置扫描组件,当前项目中所有需要Spring管理的对象都需要扫描,
②添加<aop:aspectj-autoproxy>自动代理。
③创建一个类,需要加两个注解,@Component,当作一个组件被Spring管理; @Aspect,表示为一个切面。
④写方法,如何把相应的方法设置为相应的通知?对应的注解:@Before,@After (一定会执行), @AfterRunning (返回,正常执行完成后,如果出现异常则不一定可以执行,可以设置参数操作返回值),@AfterThrowing(出现异常时,可以设置参数操作抛出异常),@Around。
⑤@order(值越小,优先级越高)
2)XML配置(🔗)(Spring专有)
通过<aop:config><aop:aspect>:表示一个切面;<aop:pointcut>:表示一个切入点;<aop:after>...每种通知类型都对应一个特定的XML元素,通知元素需要使用<pointcut-ref>来引用切入点,或用<pointcut>直接嵌入切入点表达式。
JdbcTemplate(🔗)