Java中的注解解析@Component、@ComponentScan、@Scope、@Autowired、@Bean、@ContextConfiguration、@RunWith等

@component:组件:

      把@component加在类上,则设置该类为spring管理的bean。@Component注解括号中如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称获取

@Component注解,还衍生出了其他三个注解:
  • @Controller:主要用在表现层
  • @Service:主要用在业务层
  • @Repository:主要用在数据层

@Configuration和@ComponentScan:

  • 在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml
  • 在配置类上添加包扫描注解@ComponentScan替换<context:component-scan base-package=“”/>用于扫描设置为bean的类
  • @ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
    例如:
@Configuration 
@ComponentScan("要扫描的包路径") 
public class SpringConfig { 
}

@Scope:

  • 在数据层类上方添加@Scope(prototype)则创建出来的bean对象为非单例对象,默认值singleton(是单例)

@PostConstruct和@PreDestroy

  • 在数据层类中的方法上添加@PostConstruct则会将此方法定义为此bean的生命周期中的init初始化方法
  • 在数据层类中的方法上添加@PreDestroy则会将此方法定义为此bean的声明周期中的destory销毁方法

@Autowired:自动装配

// 例如
@Autowired 
private BookDao bookDao;
  • @Autowired可以写在属性上,也可也写在setter方法上,最简单的处理方式是写在属性上并将 setter方法删除掉
  • @Autowired是按照类型注入,如果出现多个实现类则只按照类型会出错,此时可以在要装配的bean上起个名字例如:@Repository(“book”),则此时的Autowired会根据属性名称查找和属性名称一样的实现类进行自动装配。或者在@Autowired下添加@Qualifier(“bean上起的名字”)进行自动装配例如:
@Autowired 
@Qualifier("book") 
private BookDao bookDao;

@Value:对简单类型进行自动注入:

@Value("jjw") 
private String name;

即相当于给name赋值一个默认值为jjw
在配置类的上边添加一个@PropertySource(“配置文件”) 则在此处的@Value(${“配置文件中的键”}) 就可以使用配置文件中的值了。例如:

@Configuration 
@ComponentScan("要扫描的包路径")  
@PropertySource("jdbc.properties") 
public class SpringConfig {
 }


@Value("${jdbc.properties中的属性的键}")

需要注意的是如果配置文件过多则用数组包括起来

@Bean

管理第三方bean即在配置类中创建一个方法,此方法返回一个第三方的一个对象。在此方法的上边写上@Bean即将此对象封装成了bean对象。例如:

@Configuration 
public class SpringConfig { 
	@Bean 
	public DataSource dataSource(){ 
		DruidDataSource ds = new DruidDataSource(); 
		ds.setDriverClassName("com.mysql.jdbc.Driver"); 
		ds.setUrl("jdbc:mysql://localhost:3306/spring_db"); 
		ds.setUsername("root"); 
		ds.setPassword("root"); 
		return ds; 
	} 
}

或者将dataSource这个方法写到一个专门的类中,并在上边这个配置类中使用@Import({dataSource所在类的类名.class})导入即可。注意:

  • @Import参数需要的是一个数组,可以引入多个配置类。
  • @Import注解在配置类中只能写一次,下面的方式是不允许的

@RunWith用于spring整合junit

  • @RunWith(SpringJUnit4ClassRunner.class) 这个是固定的是设置类运行器,在pom.xml中引入Junit和spring-test后可以直接导入SpringJUnit4ClassRunner的
  • @ContextConfiguration(classes = {你的配置类名.class}) //设置Spring环境对应的配置类 例如:
//设置类运行器 
@RunWith(SpringJUnit4ClassRunner.class) 
//设置Spring环境对应的配置类 
@ContextConfiguration(classes = {SpringConfiguration.class}) //加载配置类

名称 @RunWith

类型 测试类注解
位置 测试类定义上方
作用 设置JUnit运行器
属性 value(默认):运行所使用的运行期

名称 @ContextConfiguration

类型 测试类注解
位置 测试类定义上方
作用 设置JUnit加载的Spring核心配置
属性 classes:核心配置类,可以使用数组的格式设定加载多个配置类
locations:配置文件,可以使用数组的格式设定加载多个配置文件名称
注意类的上边配置了上边两个内容后,类中的方法就可以就可以进行测试了

定义切入点:@Pointcut、制作切面:@Before、将通知类配给容器并标识其为切面类:@Aspect、开启注解格式AOP功能:@EnableAspectJAutoProxy

举例如下:

@Component 
@Aspect 
public class MyAdvice { 
	@Pointcut("execution(void com.itheima.dao.BookDao.update())") 
	private void pt(){} 
	@Before("pt()") 
	public void method(){ 
		System.out.println(System.currentTimeMillis()); 
	} 
}


@Configuration 
@ComponentScan("com.jjw") 
@EnableAspectJAutoProxy 
public class SpringConfig { }

名称 @EnableAspectJAutoProxy

类型 配置类注解
位置 配置类定义上方
作用 开启注解格式AOP功能


名称 @Aspect

类型 类注解
位置 切面类定义上方
作用 设置当前类为AOP切面类


名称 @Pointcut

类型 方法注解
位置 切入点方法定义上方
作用 设置切入点方法
属性 value(默认):切入点表达式


名称 @Before

类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行

@Around(“pt()”)
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println(“around before advice …”); // 前
pjp.proceed();
System.out.println(“around after advice …”); // 后
}

通配符解释:

* :单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现
execution(public * com.jjw..UserService.find())
匹配返回值为任意类型的com.jjw包下的任意包中的UserService类或接口中所有find开头的带有一个参数的
方法
..:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写
execution(public User com…UserService.findById(…))
匹配返回值为User对象的com包下的任意包中的UserService类或接口中所有名称为findById的参数任意个的方法
+:专用于匹配子类类型
execution(
*…Service+.(…))
匹配返回值为任意类型下的所有以Service结尾的接口的子类,参数可以有任意多个。 这个使用率较低,描述子类的,咱们做JavaEE开发,继承机会就一次,使用都很慎重,所以很少
用它。*Service+,表示所有以Service结尾的接口的子类。

名称 @After

类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法后运行

名称 @AfterReturning

类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间绑定关系,当前通知方法在原始切入点方法正常执行完毕后
执行

名称 @AfterThrowing

类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间绑定关系,当前通知方法在原始切入点方法运行抛出异常后
执行

名称 @Around

类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前后运行

@Transactional事务操作:

可以写在接口类上、接口方法上、实现类上和实现类方法上
写在接口类上,该接口的所有实现类的所有方法都会有事务
写在接口方法上,该接口的所有实现类的该方法都会有事务
写在实现类上,该类中的所有方法都会有事务
写在实现类方法上,该方法上有事务
建议写在实现类或实现类的方法上
名称 @Transactional
类型 接口注解 类注解 方法注解
位置 业务层接口上方 业务层实现类上方 业务方法上方
作用 为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)

名称 @EnableTransactionManagement

类型 配置类注解
位置 配置类定义上方
作用 设置当前Spring环境中开启注解式事务支持

名称 @RequestMapping

类型 类注解或方法注解
位置 SpringMVC控制器类或方法定义上方
作用 设置当前控制器方法请求访问路径
相关属性 value(默认),请求访问路径

名称 @ResponseBody

类型 类注解或方法注解
位置 SpringMVC控制器类或方法定义上方
作用 设置当前控制器方法响应内容为当前返回值,无需解析即如果写在方法上,则将方法的返回内容作为响应体返回给前端

名称 @RequestParam

类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 绑定请求参数与处理器方法形参间的关系,就是将前端请求的参数和后端接口传递的参数一一对应
相关参数 required:是否为必传参数
defaultValue:参数默认值

名称 @EnableWebMvc

类型 配置类注解
位置 SpringMVC配置类定义上方
作用 开启SpringMVC多项辅助功能、比如前端传递进来的JSON格式数据

名称 @RequestBody

类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次。例如前端发送的为JSON格式的数据时用 @RequestBody对应的参数接收

名称 @DateTimeFormat

类型 形参注解
位置 SpringMVC控制器方法形参前面
作用 设定日期时间型数据格式
相关属性 pattern:指定日期时间格式字符串例如:前端传递的为2020/02/08 则后端接收的应为@DateTimeFormat(pattern=“yyyy/MM/dd”) Date date,若前端传递的为 2021-02-02 9:09:09则后端接收的应为@DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”) Date date.

名称 @PathVariable

类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应

名称 @RestController

类型 类注解
位置 基于SpringMVC的RESTful开发控制器类定义上方
作用 设置当前控制器类为RESTful风格,
等同于@Controller与@ResponseBody两个注解组合功能

名称 @GetMapping @PostMapping @PutMapping @DeleteMapping

类型 方法注解
位置 基于SpringMVC的RESTful开发控制器方法定义上方
作用 设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,
例如@GetMapping对应GET请求
相关属性 value(默认):请求访问路径

名称 @RestControllerAdvice

类型 类注解
位置 Rest风格开发的控制器增强类定义上方
作用 为Rest风格开发的控制器类做增强
说明:此注解自带@ResponseBody注解与@Component注解,具备对应的功能

名称 @ExceptionHandler

类型 方法注解
位置 专用于异常处理的控制器方法上方
作用 设置指定异常的处理方案,功能等同于控制器方法,
出现异常后终止原始控制器执行,并转入当前方法执行
说明:此类方法可以根据处理的异常不同,制作多个方法分别处理对应的异常

@SpringBootApplication

SpringBoot启动依赖
SpringBoot 在创建项目时,采用jar的打包方式
SpringBoot 的引导类是项目的入口,运行 main 方法就可以启动项目
因为我们在 pom.xml 中配置了 spring-boot-starter-web 依赖,而该依赖通过前面的学习知道它依赖 tomcat ,所以运行 main 方法就可以使用 tomcat 启动咱们的工程。

@Mapper

原因是 Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口。而我们要解决这个问题需要在 BookDao 接口上使用 @Mapper

Lombok常见的注解有:

@Setter:为模型类的属性提供setter方法
@Getter:为模型类的属性提供getter方法
@ToString:为模型类的属性提供toString方法
@EqualsAndHashCode:为模型类的属性提供equals和hashcode方法
@Data:是个组合注解,包含上面的注解的功能
@NoArgsConstructor:提供一个无参构造函数
@AllArgsConstructor:提供一个包含所有参数的构造函数

名称 @TableField

类型 属性注解
位置 模型类属性定义上方
作用 设置当前属性对应的数据库表中的字段关系
相关属性:value(默认):设置数据库表字段名称
                  exist:设置属性在数据库表字段中是否存在,默认为true,此属性不能与value合并使用
                  select:设置属性是否参与查询,此属性与select()映射配置不冲突

名称 @TableName

类型 类注解
位置 模型类定义上方
作用 设置当前类对应于数据库表关系
相关属性 value(默认):value值要设置为数据库对应的表的名称

名称 @TableId

类型 属性注解
位置 模型类中用于表示主键的属性定义上方
作用 设置当前类中主键属性的生成策略
相关属性 value(默认):设置数据库表主键名称
type:设置主键属性的生成策略,值查照IdType的枚举值

名称 @TableLogic

类型 属性注解
位置 模型类中用于表示删除字段的属性定义上方
作用 标识该字段为进行逻辑删除的字段
相关属性 value:逻辑未删除值
                delval: 逻辑删除值

@ConfigurationProperties(prefix = “datasource”)

  1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
  2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

@LoadBalanced

负载均衡注解

@RefreshScope

在@Value注入的变量所在类上添加注解@RefreshScope

@EnableFeignClient

在启动类上添加注解开启Feign的功能

@FeignClient(“userservice”)

服务名称:userservice

@RequestHeader

获取请求头参数

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Bean注解和@Component注解都是Spring框架用来标识一个类为Bean的注解,它们有一些共同点和区别。 共同点: 1. 标识Bean:无论是@Bean注解还是@Component注解,它们都可以用来标识一个类为Spring容器Bean。 2. 自动注册:被@Bean注解或@Component注解标识的类会被Spring容器扫描并注册为Bean,可以在其他地方通过@Autowired注解进行注入。 3. 依赖注入:无论是@Bean注解还是@Component注解,它们都可以用于依赖注入,即在其他Bean通过@Autowired注解引用。 区别: 1. 使用方式:@Bean注解通常用于Java配置方式,即通过@Configuration注解的类来进行配置;而@Component注解是通用的注解,可以用于任何场景,包括Java配置方式和XML配置方式。 2. 方法级别 vs 类级别:@Bean注解通常用于方法上,表示将方法返回的对象注册为Bean;而@Component注解通常用于类级别,表示将整个类注册为Bean。但是,在使用@Component注解时,也可以用于方法上,效果与@Bean注解类似。 3. 细分注解:@Component注解还有一些派生注解,如@Service、@Repository、@Controller等,用于标识不同类型的Bean。这些派生注解在功能上与@Component注解是一样的,只是为了更好地区分和组织不同类型的Bean。 4. 参数注入:@Bean注解的方法可以接受参数,这些参数可以是其他的Bean,也可以是普通的Java对象;而@Component注解的类不能直接接受参数,需要使用构造函数或setter方法来进行注入。 总的来说,@Bean注解适用于Java配置方式,主要用于方法级别的Bean注册;@Component注解适用于通用的Bean注册场景,主要用于类级别的Bean注册,并且还有一些派生注解用于标识不同类型的Bean。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值