【Spring】核心概念:注解开发

新博客:https://blog.bigdataboy.cn/article/444.html

注解开发

配置文件的作用降低,只需要完成扫描器的定义就行,类上添加一个注解,就表示该类是容器管理的 Bean

类添加注解

import cn.bigdataboy.service.NameService;
import org.springframework.stereotype.Component;

@Component("nameService") // 参数就是 id
public class NameServiceImpl implements NameService {

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

类注解的官方推荐使用

import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;

@Controller  // 表现层
@Service   // 业务层
@Repository   // 数据层
@Component("nameService")  // 其他层

配置添加 扫描器

<?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
">

    <!-- 定义扫描器 上面的命名空间要完整,idea自动的生成的不完整-->
    <context:component-scan base-package="cn.bigdataboy"/>
</beans>

mark

纯注解开发

不再需要配置文件,所以也很容易想到,配置文件转变成配置类,同时也就能想到,在初始化容器时,传入的也就不是配置文件,而是配置类了

配置类格式

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration  // 表示配置类
@ComponentScan({"cn.bigdataboy.dao","cn.bigdataboy.service"}) // 扫描器定义多个路径,可以通配,建议准确一点,毕竟有些类不建议 Bean 化
public class SpringConfig {
}

使用

import cn.bigdataboy.config.SpringConfig;
import cn.bigdataboy.dao.NameDao;
import cn.bigdataboy.service.NameService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class AppForAnnotation {
    public static void main(String[] args) {
        // 加载配置类
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        // 从容器获取对象
        NameService nameService = (NameService) context.getBean("nameService");
        NameDao nameDao = context.getBean("nameDao", NameDao.class);
        System.out.println(nameService);
        System.out.println(nameDao);
    }
}

mark

案例代码:https://pan.bigdataboy.cn/s/y4jie

发表评论 / Comment

用心评论~