Spring全注解开发之常用注解

@Configuration

@Configuration注解:告诉spring这是一个java配置文件(类),spring会根据这个java文件生成IoC容器

/* @Configuration注解:
 *     告诉spring这是一个java配置文件(类),spring会根据这个文件生成IoC容器
 *     AppConfig(java配置类)== beans.xml配置文件
 */

@Bean  

@Bean注解:将当前方法返回的POJO装配到IoC容器中(作用等同于bean标签),括号中的name属性用于定义这个bean的名称,如果没有配置name,将会默认使用这个方法的名字作为bean的名称保存到Spring的IoC容器中。

/* @Bean注解:将当前方法返回的POJO装配到IoC容器中(作用等同于bean标签)
*     name属性用于定义这个bean的名称,如果没有配置将会默认使用方法名作为名字
*  类型为方法的返回值类型
*/

@Component

@Component注解:用于标记此类会被Spring IoC容器扫描配置为Bean,其中配置的“userDao”将作为Bean的名称,也可以不指定。如果不指定,IoC容器会将类名第一个字母小写,其余不变作为bean的名称

/* @Component注解:用于标记此类会被Spring IoC容器扫描配置为Bean
 * @Component("userDao"): 其中配置的“userDao”将作为Bean的名称,也可以不指定
 *         如果不指定,IoC容器会将类名第一个字母小写,其余不变作为bean的名称 */

 @ComponentScan

@ComponentScan注解:让Spring进行扫描,默认只扫描此类所在的包及其子包,也可以指定所扫描的包和类,例如:

1)@ComponentScan( "com.tedu.*" ):其中的 "com.tedu.*" 表示扫描com.tedu包及其所有子包,例如:com.tedu.dao、com.tedu.service、com.tedu.pojo都是com.tedu的子包,都会被扫描到。如果需要扫描的包有多个,可以按照下面的方式指定。

2) @ComponentScan( basePackages={"com.tedu.dao","com.tedu.service"} ):basePackages指定一个数组,数组中定义了所需要扫描的包。{"com.tedu.dao","com.tedu.service"} 表示扫描com.tedu.dao和com.tedu.service这两个包 。

3)@ComponentScan( basePackageClasses={UserDao.class,UserService.class} ):basePackageClasses指定一个数组,数组中定义了所要扫描类的字节码对象。

/* 
 * @ComponentScan注解:让Spring进行扫描,默认只扫描此类所在的包及其子包
 * @ComponentScan("com.tedu.*"):也可以指定所扫描的包(com.tedu包及其子包)
 * @ComponentScan(basePackages = {"com.tedu.dao","com.tedu.service"}):
 *     当需要扫描的包有多个时,可以指定多个包。
 */

@Scope

@Scope注解:指定当前Bean是单例作用域还是多例作用域,默认是单例

/ * @Scope注解:指定bean的作用域,如果不指定,默认是单例,可以指定为 prototype */

@Lazy

@Lazy注解:延迟加载(懒加载),这个是配合singleton Bean使用的,对prototype Bean不生效。

当为Bean开启了懒加载策略后,如果不获取Bean实例,Spring IoC容器将不会创建该实例的,在第一次获取时,Spring IoC容器才会创建该实例。

应用场景:大对象,使用频率不高的对象,建议使用此策略。

 * @Lazy注解:对此Bean使用懒加载策略,在第一次获取时,IoC容器才会创建该实例
 *     true为默认值,表示使用懒加载,可以省略 

@Value

@Value注解:可以为Bean的属性赋值

/* @Value注解:为Bean的属性赋值(值:数值,字符串,布尔值)*/

@PropertySource

@PropertySource注解:读取config.properties文件中的key/value到运行环境中

/*
 * @PropertySource注解:读取外部配置文件中的key/value,并保存到运行环境中
 */

@Autowired

@Autowired是我们使用得最多的注解之一,可以将定义好的Bean作为属性值注入到其他Bean的属性上,而这一过程是自动完成的。

@Autowired自动注入的原则:

1)默认优先按照类型从Spring容器中进行查找bean,如果找到一个则直接注入,如果没有找到,则抛出NoSuchBeanDefinition异常。

2)但如果该类型的bean对象在spring容器中有多个,此时还会基于属性名进行匹配,如果属性名和spring中bean的名字相同,则直接注入,如果都不匹配则直接抛出NoUniqueBeanDefinition异常。

3)当然,我们可以通过@Qualifier注解,显式的为属性指定要注入哪一个名字的bean(此注解必须配合@AutoWired注解使用)

@Autowired注解:将定义好的bean作为属性值注入到其他Bean的属性上

@Controller 

* @Controller作用: 表示当前类属于controller层(控制层)
* 同时标识将当前类的对象的创建交给Spring容器负责

@RequestMapping

/* @RequestMapping("/hello") 用于配置当前方法的访问路径,不能省略,且不能重复!
 * @RequestMapping注解在当前方法上声明的访问路径, 在当前controller类中不能重复!
 * 如果controller类上没有访问路径,当前方法上的访问路径在所有controller类中都不能重复!
 */

@InitBinder

@InitBinder注解:用于指定自定义的日期转换格式,在接受日期类型的参数时,会自动按照自定义的日期格式进行转换。

/* 自定义日期格式转换器
 * 将Springmvc默认以斜杠(/)分隔日期改为以横杠分隔(-)
 @InitBinder  
 new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true)

@ResponseBody

@ResponseBody注解:将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON或字符串等数据。

需要注意的是,在使用此注解之后不会再走视图解析器,而是直接将数据写入到输入流中,效果等同于通过response对象输出指定格式的数据。

@RequestMapping("/findAjax")
@ResponseBody
//1.将返回值结果转化为SON数据返回
//2.代表ajax请求结束

 

@SpringBootApplication

@SpringBootApplication注解标记当前类为springboot项目的启动类(即入口)

需要注意的是:

1)Spring Boot项目的启动类只能有一个(通常建议将启动类放在:其他需要扫描的类所在包的上层包内);

2)也可以将@SpringBootApplication注解添加在别的类上,该注解添加在哪个类上,那个类就是SpringBoot的启动类。

 

@Mapper

@Mapper注解:将当前Mapper接口交给Spring管理(为接口提供实现类,并根据实现类创建该类的实例,最后添加到Spring的IoC容器中)

mapper接口上也可以不加@Mapper注解,通过在启动类上添加@MapperScan注解,通过该注解来扫描com.tedu.dao包下的所有接口,例如:

@MapperScan(basePackages = "com.tedu.dao")

@SpringBootTest

@SpringBootTest:此注解描述的类为springboot工程中的单元测试类

 

@Service

@Service注解:将类交个spring去管理(业务层)

 

@Repository

@Repository用在持久层的,这个注解是将接口的一个实现类交给spring管理。

@Repository用于标注数据访问组件,即DAO组件

 

@RestController

@RestController的作用等同于@Controller + @ResponseBody

 

@Aspect

@Aspect 注解:用于标识或者描述AOP中的切面类型,基于切面类型构建的对象用于为目标对象进行功能扩展或控制目标对象的执行。

 

@Pointcut

@Pointcut注解:用于描述切面中的方法,并定义切面中的切入点(基于特定表达式的方式进行描述),在本案例中切入点表达式用的是bean表达式,这个表达式以bean开头,bean括号中的内容为一个spring管理的某个bean对象的名字。

/**
 * 切入点的定义
 * 1〕使用@Pointcut注解进行切入点的描述
 * 2)使用bean表达式定义切入点,语法bean(spring容器中管理的某个bean的名字)
 * bean表达式是一种粗力度的切入点表达式(不能具体到bean中哪个方法)
 */
@Pointcut("bean(categoryServiceImpl)") //切入点定义

@Slf4j

@Slf4j:注解描述类时,会在.java编译成.class时,自动创建一个log对象

 

 切面注解中五种通知注解:
/**
 * @Before。(目标方法执行之前执行)
 * @AfterReturning。(目标方法成功结束时执行)
 * @AfterThrowir。(目标方法异常结束时执行)
 * @After。(目标方法结束时执行)
 * @Around.(重点掌握,目标方法执行前后都可以做业务拓展)(优先级最高)
 */ 

@Around

@Around注解:用于描述切面中方法,这样的方法会被认为是一个环绕通知(核心业务方法执行之前和之后要执行的一个动作)【优先级最高】,@Aournd注解内部value属性的值为一个切入点表达式或者是切入点表达式的一个引用(这个引用为一个@PointCut注解描述的方法的方法名)。

 

@Before

@Before标识的方法为前置方法,在目标方法的执行之前执行,即在连接点之前进行执行。

 

@Afterb

@Afterb标识的方法为后置方法后置方法在连接点方法完成之后执行,无论连接点方法执行成功还是出现异常,都将执行后置方法。

 

@AfterRunning

@AfterRunning返回通知方法:当连接点方法成功执行后,返回通知方法才会执行,如果连接点方法出现异常,则返回通知方法不执行。返回通知方法在目标方法执行成功后才会执行,所以,返回通知方法可以拿到目标方法(连接点方法)执行后的结果。切面类中定义返回通知方法。

 

@AfterThrowing

@AfterThrowing异常通知:异常通知方法只在连接点方法出现异常后才会执行,否则不执行。在异常通知方法中可以获取连接点方法出现的异常。在切面类中异常通知方法。

 

@Transactional

@Transactional:该注解描述方法为事务切入点方法【方法执行时开启事务,执行完毕会提交或回滚事务】

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值