注解开发

150 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

注解开发

注解开发定义bean

\

image.png @Component的三个子注解

1.@Controller:用于表现层bean定义

2.@Service:用于业务层bean定义

3.@Repository:用于数据层bean定义

纯注解开发

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
</beans>

变为下下代码块中的@Configuration

<context:component-scan base-package="com.itheima"/>

变为下代码块中的@ComponentScan("com.itheima")

//声明当前类为Spring配置类
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式
@ComponentScan("com.itheima")
public class SpringConfig {
}

image.png 在运行类中加载配置类初始化容器由下图变为下下图

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

简单来说:就是将原本需要配置的信息封装到一个类中,并通过相关注解来完成此操作

bean管理

作用范围

image.png

生命周期

image.png

bug:

无法调用@PostConstruct和@PreDestroy

解决:

这时由于我的jdk版本为jdk11,而这这两个注解在11给删除了。因此需要在pom.xml文件中添加如下代码

javax.annotation javax.annotation-api 1.3.2

即可完成

自动装配

@Autowired:注入引用类型,自动装配模式,默认按类型装配

\

image.png

注意︰自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法

注意∶自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

@Qualifier:自动装配bean时按bean名称装配,此注解必须依赖@Autowired

image.png

上述是引用类型

下面是基本类型

@Value实现简单类型注入

image.png

但在日常中,我们一般是接收外部的值,所以要进行相关操作。

1.在配置类中加入@PropertySource({"jdbc.properties"})。jdbc.properties即为外部属性所在的文件

2.在相应impl中通过@Value("${name}"),name为jdbc.properties里的属性名

注意:不支持使用@PropertySource({"*.properties"})

加载properties文件

\

image.png

第三方bean管理

使用@Bean配置第三方bean

image.png 但是不建议直接写到配置类中,会造成该类冗余,繁琐

因此,新建一个类。看得出,这是一个有关jdbc的操作,因此创建JdbcConfig来存放上述方法,即使用独立的配置类来管理第三方bean

image.png

将独立的配置类加入核心配置

1.导入式

public class JdbcConfig {//独立配置
    @Bean
    public DataSource dataSource(BookDao bookDao){
        System.out.println(bookDao);
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
@Configuration//核心配置
@ComponentScan("com.itheima")
//@Import:导入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}

2.扫描式

image.png

注解开发实现为第三方bean注入资源

简单类型依赖注入

@Value("com.mysql.jdbc.Driver")
private String driver;
@Value("jdbc:mysql://localhost:3306/spring_db")
private String url;
@Value("root")
private String userName;
@Value("root")

在导入式下的第一块代码中加上上述代码即可

image.png 引用类型依赖注入

image.png

XML配置与注解配置比较

image.png 标红的为后续经常使用