spring-13

@Required 注解

     

@Required 注解用于标记必需的属性或参数,它确保被标记的属性或参数在使用之前被赋值,否则会抛出异常。

下面是一个使用 @Required 注解的完整代码示例:

import org.springframework.beans.factory.annotation.Required;

public class Person {
    private String name;

    @Required
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

在上面的示例中,我们在 setName 方法上使用了 @Required 注解,表示 name 属性是必需的。如果在使用 Person 类的 setName 方法之前没有为 name 属性赋值,Spring 容器会抛出 BeanInitializationException 异常,提示 name 属性未被正确设置。

另外,需要确保在使用 @Required 注解时,所使用的 Spring 版本支持它。

@Autowired 注解

     

@Autowired注解用于自动装配Spring容器中的Bean对象。通过@Autowired注解,Spring会自动在容器中查找匹配的Bean并将其注入到需要的地方。

以下是一个完整的代码示例:

@Service
public class UserService {
    private UserDao userDao;

    @Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    // 使用userDao进行一些操作
    // ...
}

@Repository
public class UserDao {
    // UserDao的具体实现
    // ...
}

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 配置Spring的自动扫描和装配
    // ...
}

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = context.getBean(UserService.class);

        // 使用userService进行一些操作
        // ...
    }
}

在上述示例中,我们定义了一个UserService类和一个UserDao接口。在UserService类中,我们使用@Autowired注解将UserDao对象注入到userService中。通过自动装配,Spring会自动查找容器中类型为UserDao的Bean并将其注入到userService中。

AppConfig类中,我们使用@ComponentScan注解指定要扫描的基础包路径,这样Spring就会自动扫描这个包以及其子包中的所有类,并将标有@Service、@Repository等注解的类注册为Bean。

Main类中,我们通过创建AnnotationConfigApplicationContext对象并传入AppConfig.class来初始化Spring容器。然后我们可以使用context.getBean(UserService.class)来获取UserService的实例。通过自动装配,userService中的userDao已经被自动注入进来了。

@Qualifier 注解

     

@Qualifier注解用于解决依赖注入中的歧义问题。当一个接口有多个实现类时,使用@Qualifier注解可以明确指定要注入的实现类。

以下是一个完整的代码示例:

// 定义接口
public interface Animal {
    String getType();
}

// 实现接口的两个类
@Service("dog")
public class Dog implements Animal {
    public String getType() {
        return "dog";
    }
}

@Service("cat")
public class Cat implements Animal {
    public String getType() {
        return "cat";
    }
}

// 使用@Qualifier注解指定要注入的实现类
public class App {
    @Autowired
    @Qualifier("dog")
    private Animal animal;

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.scan("com.example");
        context.refresh();

        App app = context.getBean(App.class);
        System.out.println(app.animal.getType());
    }
}

在上面的示例中,有一个Animal接口和它的两个实现类Dog和Cat。在App类中,使用@Autowired和@Qualifier("dog")注解来注入Animal的实现类。通过指定@Qualifier("dog"),我们明确地告诉Spring容器要注入的是Dog实例。在main方法中,我们创建了一个ApplicationContext,并通过getBean方法获取了App类的实例。调用app.animal.getType()方法后,输出结果为"dog"。如果我们将@Qualifier("dog")改为@Qualifier("cat"),输出结果将变为"cat"。这样,使用@Qualifier注解可以确保我们注入了我们想要的实现类。

总结 

  1. @Component:用于标记一个类为组件类,Spring会自动将其实例化并管理。

  2. @Controller:用于标记一个类为控制器类,通常用于处理HTTP请求。

  3. @Service:用于标记一个类为服务类,通常用于业务逻辑的处理。

  4. @Repository:用于标记一个类为数据访问类,通常用于处理数据库操作。

  5. @Autowired:用于标记一个字段、构造方法或方法参数,告诉Spring自动进行依赖注入。

  6. @Qualifier:用于指定需要注入的具体实现类,通常与@Autowired一起使用。

  7. @Value:用于注入配置属性值。

  8. @RequestMapping:用于映射HTTP请求的路径和方法。

  9. @ResponseBody:用于将方法返回值直接写入HTTP响应体。

  10. @PathVariable:用于获取URL路径中的参数。

  11. @RequestParam:用于获取HTTP请求参数。

  12. @Valid:用于开启方法参数的校验。

  13. @Transactional:用于声明事务,通常用于在方法上。

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值