springbootJava之家

Spring框架常用注解简单介绍

2020-08-19  本文已影响0人  小小土豆dev

Spring框架常用注解简单介绍
SpringMVC常用注解简单介绍
SpringBoot(一)创建一个简单的SpringBoot工程
SpringBoot(二)SpringBoot多环境配置
SpringBoot(三)SpringBoot整合MyBatis
SpringBoot(四)SpringBoot整合 Redis

Spring

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。Spring的核心思想是IOC和AOP。

Spring注解分类:

  1. 用于创建对象的
  2. 用于注入数据的
  3. 用于改变作用范围的
  4. 和生命周期相关的(了解)

(一)用于创建对象的注解

@Component 注解

相当于 bean 标签,value属性用于指定id,如果不写,默认是当前类名首字母小写。

由此注解衍生出来的三个注解:

它们的作用、属性和 @Component 是一模一样的。它们的出现是Spring框架为我们提供更明确的语义话来指定不同层的bean对象。

@Controller和@RestController的区别?

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

  1. 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。例如:本来应该到success.jsp页面的,则其显示success.
  2. 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
  3. 如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

(二)用于注入数据的注解

用于注入bean类型

@Autowired 注解

作用:自动按照类型注入。只要Spring容器中有唯一的类型匹配,就可以注入成功。如果没有匹配的类型就报错。
如果有多个类型匹配时,就用变量名称作为bean的id,再容器中查找,如果找到,就注入成功。没有找到就报错。

属性:
required:
取值为true时,如果没有匹配的对象,就报错。(默认值)
取值为false时,如果没有匹配的对象,不会报错。

@Qualifier 注解

作用:在自动按照类型注入的基础上,在按照bean的id注入。如果有多个类型匹配,就按照id注入。

属性:
value:用于指定bean的id

@Resource 注解

作用:直接按照bean的id注入

属性:
value:用于指定bean的id

以上三个注解,都只能用于注入bean类型,而不能用于注入基本类型、String类型和复杂类型。

@Value 注解

作用:用于注入基本类型、String类型

属性:
value:用于指定要注入的数据,它支持使用 Spring 的 EL 表达式(Spring 的 EL 表达式:${表达式})

(三)用于改变作用范围的注解

@Scope 注解

作用:用于改变bean的作用范围

取值:

(四)和生命周期相关的注解(了解)

@PostContruct 注解

作用:用于指定初始化方法。

@PreDestroy 注解

作用:用于指定销毁方法。

示例代码

//@Component(value = "accountService")
@Service(value = "accountService")
@Scope("singleton")
public class AccountServiceImpl implements IAccountService {
    
//    @Autowired
//    @Qualifier("accountDao")
    @Resource(name = "accountDao")
    private IAccountDao dao;

//    @Value("com.mysql.cj.jdbc.Driver")
    @Value("${driverClass}")
    private String driver;
    
    @PostConstruct
    public void init() {
        System.out.println("--- init ---");
    }
    
    @PreDestroy
    public void destroy() {
        System.out.println("--- destroy ---");
    }

    @Override
    public void saveAccount() {
        dao.saveAccount();
        System.out.println(driver);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读