Spring的常用注解

文章介绍了Spring框架的核心功能,包括作为IoC容器存储和检索对象,以及如何通过注解如@Controller、@Service等将对象存入容器。此外,讲解了@Configuration、@Bean等注解的使用,以及对象注入的三种方式:属性注入、构造方法注入和setter注入,对比了@Resource和@Autowired的异同。
摘要由CSDN通过智能技术生成

一、Spring的核心功能

spring是包含了众多方法的IoC容器,所以它有两个核心功能:
(1)将对象存储到容器中
(2)将对象从容器中取出来

二、怎样将对象存储到容器中

带你了解spring
此文章是一种将对象存储和读取的方法,现在我们还有一种更简单的方法,是通过注解将对象存储到容器中。

Spring有两类注解可以实现:
(1)类注解:@Controller、@Service、@Repository、@Component、@Configuration
(1)方法注解:@Bean
1.@Configuration是配置层的注解,存放所有配置信息
2.@Controller是控制器层注解,和前端打交道,主要验证前端结果的有效性
3.@Service是服务层的注解,主要是组织数据和调用相应的接口
4.@Repository是数据持久层的注解,主要和数据库打交道,执行具体的CURD操作
5.@Component是以上四个类注解的父类,上面四个注解都是依靠@Component实现的
6.@Bean是放在方法上的注解,是将当前方法的返回值存储到Spring中,以便在其他地方按照需求进行注入和使用。

注意:方法注解要配合类注解使用才有效果。

配置文件

<!-- beans下的所有类需要spring扫描-->
<content:component-scan base-package="com.beans"></content:component-scan>
public class User {
        String name;
        int id;
        int age;

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

        public void setId(int id) {
            this.id = id;
        }

        public void setAge(int age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "id='" + id +'\'' + ","+"name='" + name + '\'' + ", age=" + age ;
        }

}
@Service
public class UserService {
    public User getUser(int id){
        User user=new User();
        user.setId(id);
        user.setName("张三");
        user.setAge(18);
        return user;
    }
}
public class Main {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        UserService userService= (UserService) context.getBean("userService");
        System.out.println(userService.getUser(1));
    }
}

其他四个类注解使用方法也同上。

@Bean的例子
一个接口

public interface UserService {
    void addUser(User user);
}

UserServiceImpl实现了这个接口

@Service
public class UserServiceImpl implements UserService {
    @Override
    public void addUser(User user) {
        // 添加用户逻辑
    }
}

使用@Bean注解标注了一个方法。该方法返回一个UserService实例,我们可以通过调用该方法来让Spring容器管理UserService实例。我们可以在其他地方通过依赖注入的方式来使用这个实例

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

@Service
public class OrderService {
    @Autowired
    private UserService userService;
    
    // 其他业务逻辑
}

三、对象注入

可以通过@Autowired和@Resource实现对象注入。
@Autowired三个实现方法:
1、属性注入

@Controller
public class UserService {
    @Autowired
    private Repository repository;
    public User getUserById(int id){
        return repository.getUserById(id);
    }
}

2.构造犯法注入

@Controller
public class UserController {
    private Repository repository;
    @Autowired
    public UserController(Repository repository){
        this.repository=repository;
    }
    public User getUserById(int id){
        return repository.getUserById(id);
    }
}

3.setter注入

@Controller
public class UserController {
    private Repository repository;
    @Autowired
    public void setRepository(Repository repository){
        this.repository=repository;
    }
    public User getUserById(int id){
        return repository.getUserById(id);
    }
}

三种注解的优缺点:
1.属性注入:优点是简洁,缺点是只能用于IoC容器;
2.构造方法注入:spring推荐的注入方法,优点是通用性比较强,缺点是多个注入会比较臃肿;
3.setter注入:缺点是通用性不如构造方法注入。

@Resource和@Autowired使用方法一样,但@Resource不支持构造方法注入。
@Resource和@Autowired的区别:
1.出身不同:@Resource来自JDK注解,而@Autowired来自spring;
2.参数设置不同:@Resource支持更多参数的设置,如name等。
3.支持注入类型不同:@Resource不支持构造方法注入,而@Autowired支持采属性注入、构造方法注入和setter注入。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值