Spring纯注解开发入门

2023-08-09 19:08:31 浏览数 (1)

Spring MVC入门(注解开发)

一、入门

1. 使用@Component定义bean

代码语言:javascript复制
@Component("bookDao")
public class BookDaoImpl implements BookDao {
    ...
};

2. 核心配置文件中通过组件扫描bean

代码语言:javascript复制
<context:component-scan base-package="com.cikain"/>

3. @Component注解的三个衍生注解

  • @Controller:用于表现层bean定义
  • @Service:用于业务层bean定义
  • @Repository:用于数据层bean定义

三个衍生注解与@Component用法与功能一样,名称不同,易于区分

二、 简化(配置类)

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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
">

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

</beans>

同等于

代码语言:javascript复制
@Configuration
@ComponentScan("com.cikian")
public class SpringConfig {
};

使用配置类时

代码语言:javascript复制
public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookService bookService = ctx.getBean(BookService.class);
        bookService.save();
    };
};

注意:

@Configuration用于设定当前类为配置类

@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据用数组格式,如:

代码语言:javascript复制
@ComponentScan({"com.cikian.service","com.cikian.dao"};)

三、纯注解控制bean生命周期

代码语言:javascript复制
@Component
@Scope("singleton")
public class BookServiceImpl implements BookService {
    private BookDao bookDao;

    @Override
    public void save() {
        System.out.println("BookServiceImpl save");
        bookDao.save();
    };

    @PostConstruct
    public void init() {
        System.out.println("BookServiceImpl init");
    };

    @PreDestroy
    public void destroy() throws Exception {
        System.out.println("BookServiceImpl destroy");
    };
};
  1. @Scope注解控制bean单例或非单例
  2. @PostConstruct定义bean初始方法
  3. @PreDestroy定义bean销毁方法

四、依赖注入(自动装配)

1. 注入引用类型

代码语言:javascript复制
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    public void save() {
        System.out.println("BookServiceImpl save");
        bookDao.save();
    };
};

注意:使用注解注入依赖时,对私有属性进行暴力反射初始化私有属性,所以可以不需要setter方法。自动装配默认按类型注入,假设有多个类型相同的bean,Spring支持俺名称装配,使用@Qualifier注解指定名称,此注解依赖@Autowired注解

2. 注入简单类型(值类型)

使用@Value注解,如:

代码语言:javascript复制
public class BookServiceImpl implements BookService {
    @Value("book_name")
    private String name;
};

3. 加载配置文件

在配置类中使用@PropertySource注解加载外部配置文件,如:

代码语言:javascript复制
@Configuration
@ComponentScan("com.cikian")
@PropertySource("jdbc.properties")
public class SpringConfig {
};

多个配置文件使用数组格式:@PropertySource({"jdbc.properties","jdbc2.properties","jdbc3.properties"}) 不支持使用通配符!

五、管理第三方bean

1. 配置bean

使用druid举例,举例仅为常用方法

新建配置类JdbcConfig类

代码语言:javascript复制
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/cikian");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    };
};

在此配置类中创建方法,方法返回值为所需要的bean,并在方法上方使用@Bean注解。可使用@Bean("bean名称")给bean设置名称。

在Spring配置类中导入JdbcConfig类

代码语言:javascript复制
@Configuration
@Import({JdbcConfig.class};)
public class SpringConfig {
};

使用@Import注解导入配置,@Import({})导入多个配置以数组格式传递参数。

2. 第三方bean注入依赖

简单类型使用@Value注解,引用类型给出形参即可。

代码语言:javascript复制
public class JdbcConfig {
    @Value("${jdbc.driverClassName};")
    private  String driverClassName;
    @Value("${jdbc.url};")
    private String url;
    @Value("${jdbc.username};")
    private String username;
    @Value("${jdbc.password};")
    private String password;

    @Bean
    public DataSource dataSource(BookService bookService){
        System.out.println(bookService);
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    };
};

六、XML配置与注解配置对比

0 人点赞