一、JavaSE阶段
二、JavaEE Web学习阶段(Servlet+jsp+Ajax+myBatis)
三、JavaEE Spring5基础框架阶段
组件类注解
1、Compnent
可以算的上是一种元注解类型,等价于Service,下面三种注解的定义依赖于该注解
注解:@Component注解可以等价,作用于类,Spring会扫描组件类然后实例化
//给实例化的bean的取一个名字"userService"
@Component(“userService”)
public class UserServiceImpl implements UserService{}
//不给实例化的bean取名字,默认按照类的首字母小写来声明,即bean的名称为“userServiceImpl”
@Component
public class UserServiceImpl implements UserService{}
- @Controller(用于区分表现层) @Service(用于区分业务层) @Repository(用于区分数据层) 继承了 @Component
- @Configuration也继承了@Component 且代表Spring配置,相当于applicationContext.xml
2、Configuration 为Spring配置类进行标记
3、Service 为数据访问层进行标记
4、Repository 为数据持久层进行标记
5、Scope 作用范围,面试重点 ,Java中的五大作用域之一,默认情况是单例的
6、PostConstruct 为Bean的声明周期中初始化方法进行标记
7、PreDestroy 容器关闭,Bean对象会进行入销毁阶段(不重要)
ApplicationContext 没有Close 方法,其实现类是有close()方法。
还有例如
8、Lazy (不重要,用的很少)
与Bean中的LazyInit效果是一样的,在性能优化方面有应用,默认是true,是延迟(注解开发),xml配置中采取的是立即实例化策略,因为xml要解析,需要时间,本身就是要把实例化的Bean放入到Ioc容器中。
小结:
9、工厂Bean注解(非常重要)
一般工厂类,
IOC 操作 Bean 管理(FactoryBean)
1、Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean)
2、普通 bean:在配置文件中定义 bean 类型就是返回类型
3、工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样
第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean
第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型
package com.ligong.factory;
import com.ligong.service.UserService;
import com.ligong.service.impl.UserServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* project : spring_01
* <p> 定义工厂方法,加上@Bean注解完成工程bean实例化 </p>
*
* @author
* @date 2022-02-10【星期四】
**/
@Configuration
public class UserServiceFactory {
/**
* 静态工厂方法,被bean所标识的,返回对象会放置到IOC容器中
* @Bean放在工厂方法上,如果不声明名字,默认是方法名称。
* @author luozhao
* @date 2022/2/10 15:10
* @param
* @return UserService
*/
public static UserService createUserService1(){
return new UserServiceImpl();
}
@Bean({"u1","u2"})
public UserService createUserService2(){
return new UserServiceImpl();
}
}
10、PropertySource
没有默认值的注解必须要进行给值
1、普通数据例如
PropertySource(classpath:jdbc.properyies)加载dataSource连接信息
10.1、Value
成员属性赋值
11、import 引入外部配置类
12、AutoWired 自动装配类型注解
Spring会根据规则自动给引用类型成员赋值
规则:
默认会按照类型去找,但是容器中如果一个字节码文件有3个对象那么会按照Bean"名称去找"
错误展示:
XML方式自动装配的类型:
13、@MapperScan(basePackages = “com.ligong.mapper”)
用来扫描Dao层(Mapper层)
14、@ComponentScan(“com.ligong”)
扫描配置Bean,添加到SpringIOC容器中
AOP阶段注解学习
1、Aop是一种面向切面的编程思想
显示Aop思想技术:
aspectj 、spring aop(使用动态代理技术奖切面中通知应用到目标类中方法上 进而增强)
2、aop概念
目标对象:要被增强的方法所在类的对象
切面:抽取公共重复的代码封装为类@Aspect
织入:将切面中的通知方法应用到目标对象的方法前后的位置,这个过程叫做"织入"
注意:目标对象和切面类对象都要放到容器中!
3、aop入门案例
一个前提要在poml文件找那个引入spring-context核心jar以及aspectjwearver
三个步骤:
目标对象放置到容器中
@Aspect 切面===>@Ponintcut(配置切入点表达式)
1、@Aspect 标记Aop切面类,使该类变为一个切面类
要与@Component 进行组合使用,添加到Ioc容器中
2、 @Pointcut 配置切入点匹配规则
5种通知
3、@Before前置通知
4、@After后置(最终)通知
5、@Around 环绕通知
执行结果:
如果不写jionPoint.proceed();那么会不执行save方法。
环绕通知种jionPointApi可以通过反射获取相信的方法信息
6、AfterReturning @返回通知
7、AfterThrowing异常通知
5种通知执行顺序
值得注意的是Spring 5.2.7之前的版本不是下面这个顺序
链接: Spring整合Mybatis、Junit、Aop的一个记录用户操作记录的小案例。.
Spring 事务声明
SpringMvc中注解
RestFul风格注解
1、PathVariable
案例1、
案例2、
持久层dao中接口注解:
Controller中处理分页注解:
前端页面通过PostMan请求结果
StringBoot中枚举注入,和枚举读取