spring中getBeansWithAnnotation(Class<? extends Annotation> annotationType)方法

spring中可以通过getBeansWithAnnotation来获取ioc容器中使用了某个注解的所有bean,这个方法底层原理:我们知道可以通过反射来获取一个类中所有的注解,然后通过遍历spring容器中所有bean就能获取需要的结果。

//自定义@Auditable注解
package com.yk.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface Auditable {
    String[] value();
}

//在person类中我们引入@Auditable,并通过@Component将其注入spring容器
package com.yk.annotation;

import org.springframework.stereotype.Component;

@Component
@Auditable("person.sleep")
public class Person {

    void sleep(){
        System.out.println("睡觉了");
    }
}

    @Test
    public void test03() throws ClassNotFoundException {
        Class aClass = Class.forName("com.yk.annotation.Auditable");
        //boolean b = aClass.isAnnotation();
        //System.out.println(b);
        //Person person = ac.getBean(Person.class);
        Map beansWithAnnotation = ac.getBeansWithAnnotation(aClass);

        Iterator entries = beansWithAnnotation.entrySet().iterator();

        while (entries.hasNext()) {

            Map.Entry entry = (Map.Entry) entries.next();
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

        }
    }

打印结果为
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/transportation") public class TransportationController<TransportationRepository> { @Autowired private TransportationRepository transportationRepository; @PostMapping("/create") public ResponseEntity<?> createTransportation(@RequestBody TransportationDto transportationDto) { Transportation transportation = new Transportation(); transportation.setFrom(transportationDto.getFrom()); transportation.setTo(transportationDto.getTo()); transportation.setDepartureTime(transportationDto.getDepartureTime()); transportation.setArrivalTime(transportationDto.getArrivalTime()); transportationRepository.save(transportation); return ResponseEntity.ok("Transportation created successfully"); } @GetMapping("/all") public ResponseEntity<?> getAllTransportations() { List<Transportation> transportations = transportationRepository.findAll(); return ResponseEntity.ok(transportations); } @GetMapping("/{id}") public ResponseEntity<?> getTransportationById(@PathVariable Long id) { Transportation transportation = transportationRepository.findById(id).orElse(null); if (transportation == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(transportation); } }这段代码所有的transportationRepository的方法都报错,比如Cannot resolve method 'save' in 'TransportationRepository',请帮我修改
05-28
根据您提供的代码,TransportationController类使用了泛型TransportationRepository,但是没有定义TransportationRepository接口或类,导致编译器无法识别相应的方法。您需要创建一个TransportationRepository接口,并定义相关的CRUD方法,类似于下面这样: ``` import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface TransportationRepository extends JpaRepository<Transportation, Long> { } ``` 其,Transportation是您的实体类,Long是实体类的ID类型。这里使用了Spring Data JPA提供的JpaRepository接口,它提供了一组标准的CRUD方法,包括save、findAll、findById等。 另外,TransportationController类的泛型定义应该去掉,修改为: ``` @RestController @RequestMapping("/transportation") public class TransportationController { @Autowired private TransportationRepository transportationRepository; @PostMapping("/create") public ResponseEntity<?> createTransportation(@RequestBody TransportationDto transportationDto) { Transportation transportation = new Transportation(); transportation.setFrom(transportationDto.getFrom()); transportation.setTo(transportationDto.getTo()); transportation.setDepartureTime(transportationDto.getDepartureTime()); transportation.setArrivalTime(transportationDto.getArrivalTime()); transportationRepository.save(transportation); return ResponseEntity.ok("Transportation created successfully"); } @GetMapping("/all") public ResponseEntity<?> getAllTransportations() { List<Transportation> transportations = transportationRepository.findAll(); return ResponseEntity.ok(transportations); } @GetMapping("/{id}") public ResponseEntity<?> getTransportationById(@PathVariable Long id) { Transportation transportation = transportationRepository.findById(id).orElse(null); if (transportation == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(transportation); } } ``` 这样,就可以正确地调用transportationRepository的方法了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ashes of time

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值