Spring框架常用注解(Annotation)收录

Spring框架常用注解(Annotation)收录

Spring框架广泛使用注解来配置和管理Bean,简化了XML配置,提高了开发效率。以下是一些Spring框架中常用的注解:

1. @Component, @Service, @Repository, @Controller

  • 用途:这些是组件扫描注解,用于标记Spring应该管理的类。它们本质上都是@Component的特殊化,分别对应于业务服务层、数据访问层、持久层和表现层的类。

    @Service
    public class MyService {
        // 业务逻辑
    }
    

2. @Autowired

  • 用途:自动装配,Spring会自动寻求满足Bean的依赖,通常是通过类型匹配来注入依赖对象。可以用于字段、构造器、setter方法上

    @Service
    public class MyService {
        @Autowired
        private MyRepository repository;
        // ...
    }
    

@Autowired与@Resource异同:

  1. @Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上。

  2. @Autowired默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果

要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我

们想使用名称装配可以结合@Qualifier注解进行使用

  1. @Resource(属于J2EE复返),默认按照名称进行装配,名称可以通过name属性进行指定。如果

没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在

setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是

需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName。

3. @Qualifier

  • 用途:当有多个相同类型的Bean时,与@Autowired一起使用,指定应该注入哪个具体的Bean。

    @Autowired
    @Qualifier("mySpecialRepository")
    private MyRepository specialRepository;
    

4. @Value

  • 用途:用于读取属性文件中的值并注入到Bean中,支持SpEL表达式。

  • 示例

    @Value("${app.name}")
    private String appName;
    

5. @Configuration

  • 用途:标记一个类作为配置类,可以包含@Bean注解的方法来声明一个或多个Bean。

  • 示例

    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyService();
        }
    }
    

6. @Bean

  • 用途:在@Configuration类中声明一个Bean。告诉Spring如何创建一个特定的bean实例。
@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

7. @RequestMapping, @GetMapping, @PostMapping, etc.

  • 用途:用于处理HTTP请求映射。@RequestMapping是一个通用注解,可以用于处理任意类型的HTTP请求,而@GetMapping, @PostMapping等是它的特化,分别对应GET、POST等HTTP方法。

    @RestController
    @RequestMapping("/api/users")
    public class UserController {
       
       @GetMapping("/{id}")
       public User getUserById(@PathVariable Long id) {
           // 处理GET请求
       }
       
        @PostMapping
        public ResponseEntity<User> createUser(@RequestBody User user) {
            // 处理POST请求
        }
    }
    

8. @Transactional

  • 用途:用于指定一个方法或类的事务边界。当方法被调用时,Spring会自动开启和提交或回滚事务。

    @Service
    @Transactional
    public class MyService {
        public void updateAndSave(User user) {
            // 数据操作
        }
    }
    

这些注解极大地简化了Spring应用的开发和配置,使得开发者能够更加专注于业务逻辑的实现。

了解更多知识请戳下:

@Author:懒羊羊

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,我们需要定义一个注解 @RequiresPermissions,用于标记需要权限控制的方法。代码如下: ``` @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface RequiresPermissions { String[] value(); } ``` 然后,我们需要定义一个切面类,用于拦截被 @RequiresPermissions 标记的方法,并进行权限控制的逻辑。代码如下: ``` @Component @Aspect public class PermissionAspect { @Autowired private PermissionService permissionService; @Pointcut("@annotation(com.example.demo.annotation.RequiresPermissions)") public void requiresPermissionsPointcut() {} @Around("requiresPermissionsPointcut()") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { // 获取当前用户信息 User currentUser = UserContext.getCurrentUser(); // 获取方法上的权限标记 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); RequiresPermissions annotation = signature.getMethod().getAnnotation(RequiresPermissions.class); String[] permissions = annotation.value(); // 校验权限 boolean hasPermission = permissionService.checkPermissions(currentUser, permissions); if (!hasPermission) { throw new UnauthorizedException("没有访问权限"); } // 执行原方法 return joinPoint.proceed(); } } ``` 在上述代码中,我们通过 @Pointcut 注解定义了一个切点,用于匹配被 @RequiresPermissions 标记的方法。然后,在 @Around 注解的方法中,我们获取了当前用户信息,以及方法上的权限标记。接着,我们调用 PermissionService 的 checkPermissions 方法,校验当前用户是否拥有对应的权限。如果权限校验失败,我们抛出 UnauthorizedException 异常,表示没有访问权限。否则,我们执行原方法,并返回执行结果。 最后,我们定义一个 PermissionService 接口,用于查询用户权限信息。具体实现可以根据实际情况进行编写。代码如下: ``` public interface PermissionService { /** * 校验用户是否拥有指定的权限 * * @param user 当前用户 * @param permissions 权限列表 * @return 是否拥有指定权限 */ boolean checkPermissions(User user, String[] permissions); } ``` 综上,我们通过 Spring AOP 和自定义注解,模拟实现了 Shiro 框架的权限控制功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会撸代码的懒羊羊

打赏5元,买杯咖啡醒,继续创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值