Spring基于注解进行开发

spring基于注解开发


通过注解的形式用于bean的定义(@Componet衍生3个注解,用于不同层次的bean的定义 )这些注解需要放在对应的接口实现类上

1、@Controller:用于表现层的bean的定义---》Controller层

2、@Service:用于业务层的bean的定义---》Service层

3、@Repository:用于数据层的bean的定义---》Dao层


如果是通过配置类的形式来替代原有的applicationContext.xml的话就需要定义一个配置类SpringConfig

定义一个配置类:

1、声明当前类为Spring配置类@Configuration

2、设置bean扫描路径,多个路径书写为字符串数组格式@ComponentScan({"com.itheima.service","com.itheima.dao"})

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

同时在对应的运行主类中通过如下方式(AnnotationConfigApplicationContext)获取对应的Spring的容器

java 复制代码
//获取spring容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

bean对象的自动装配(@Qualifier:自动装配bean时按bean名称装配)通过暴力反射对于其对应的私有属性进行初始化--》不需要在写出setter方法

java 复制代码
@Service
public class BookServiceImpl implements BookService {
    //@Autowired:注入引用类型,自动装配模式,默认按类型装配
    @Autowired
    //@Qualifier:自动装配bean时按bean名称装配
    @Qualifier("bookDao")
    private BookDao bookDao;

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

通过注解@Autowired

@Qualifie r:自动装配bean时按bean名称装配 @Qualifier("bookDao")

简单类型的注入

java 复制代码
//@Value:注入简单类型(无需提供set方法)
    @Value("${name}")
    private String name;

加载配置文件:

java 复制代码
@PropertySource加载properties配置文件
@PropertySource({"jdbc.properties"})

管理第三方的bean:将JDBC的配置类调入到spring配置类中去(推荐使用@Import的形式,不推荐使用@ComponentScan({},{}))

@Import:导入JDBC配置信息:(@Import({JdbcConfig.class})

java 复制代码
public class JdbcConfig {
    //1.定义一个方法获得要管理的对象
    @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")
    private String password;
    //2.添加@Bean,表示当前方法的返回值是一个bean
    //@Bean修饰的方法,形参根据类型自动装配
    @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;
    }
java 复制代码
@Configuration
@ComponentScan("com.example")
//@Import:导入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}
通过注解@Bean进行自动装配第三方的bean信息

引用类型的通过成员变量进行引入,简单类型通过@value进行初始化,再通过调用变量名引入

java 复制代码
//添加@Bean,表示当前方法的返回值是一个bean
//@Bean修饰的方法,形参根据类型自动装配
@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;
}

注解配置对比原有的XML的bean配置


相关推荐
hqxstudying12 分钟前
Java异常处理
java·开发语言·安全·异常
我命由我123453 小时前
Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)
java·开发语言·jvm·windows·java-ee·kotlin·list
武子康5 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
YuTaoShao8 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw8 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨8 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
双力臂4049 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
心之语歌9 小时前
Spring AI MCP 客户端
人工智能·spring·github
Edingbrugh.南空9 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
QQ_43766431410 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++