Spring入门
Spring的三层结构:
-
controller:控制层;
-
svervice:逻辑层;
-
dto:数据处理层;
控制层和逻辑层,逻辑层和数据处理层,分别产生耦合;
怎么解决高耦合情况:
-
容器思想:将生产者将对象放入容器【控制反转】,消费者从容器取对象【依赖注入】;
-
控制反转【Inversion Of Control, IOC】:对象的创建控制权转移到外部容器;
- 注解:@Component,将对象的创建权交给容器;
-
依赖注入【Dependency Injection, DI】:容器为应用程序提供运行时,所以依赖的资源;
- 注解:@Autowired,对象自动注入;
-
Bean对象:IOC容器中创建,管理的对象,称之为bean;
-
IOC详解:
注解 说明 位置 @Component 声明bean的基础注解 不属于以下三类时的注解 @Controller @Component的衍生注解 标注在控制器上 @Service @Component的衍生注解 标注在业务上 @Repository @Component的衍生注解 标注在数据访问类上【与mybatis整合】 -
声明控制器bean只能用@Controller;
-
声明bean的时候,可以通过value指定bean的名字,默认时类名首字母小写;
-
声明之后,要想生效需要被组件@ComponentScan扫描,它默认包含到@SpringBootApplication注解中,当显示注解时,默认扫描会被覆盖;
- @SpringBootApplication中的默认扫描范围时启动类所在包及其子类;
-
-
DI详解:
- @Autowired注解,是默认按照类型进行注解,对于一个接口如果有多个实现类,那么这个接口对象就存在多个相同的bean【多态的问题】;
- @Primary:设置优先级解决@Autowired问题;
- @Qualifier("类名")配合@Autowired使用:指定注入类;
- @Resource(name = "类名"):jdk提供,按照所给名称注入;
- @Autowired按照类型注入;
- @Autowired注解,是默认按照类型进行注解,对于一个接口如果有多个实现类,那么这个接口对象就存在多个相同的bean【多态的问题】;
配置文件yml:
- 默认注入配置信息方法:@Value("${springt.name}");
- 自动注入:名称相同;
- 提供@Data注解,给属性get和set方法;
- 交给IOC容器管理;
- 由@ConfigurationProperties(prefix = "配置文件的前缀")
过滤器【Filter,拦截对资源的请求,是javaweb的组件之一】:
- 定义实现Filter接口的类;
- 加上拦截注解@WebFilter(urlPatterns = "/*"),
- 并不属于spring的组件,所以在启动类开启Servlet组件@ServletComponentScan
- 过滤器链,多个过滤器的串联;
- 执行顺序的优先级和过滤器类名【字符串】的自然排序;
- 拦截器【Interceptor, Spring提供】
- "/*":只能拦截一级路径;
- "/**":能拦截任意路径;
- 只拦截Spring环境下的请求,Filter过滤器能力更强;
Spring事务管理
- @Transactional
- 默认情况下,只有RuntimeException才会回滚;
- @Transactional(rollbackFor=Excetion.class):控制何种异常类型出现回滚事务;
- propagation:两个方法都具有事务,而且存在相互调用;
- 默认【propagation = requires】共用一个事务;
- 【propagation = requires_new】会挂起当前事务,然后新建一个事务,事务不相互影响;

浙公网安备 33010602011771号