Spring第六天(注解开发第三方Bean)

发布时间:2024年01月20日

注解开发管理第三方Bean

显然,我们无法在第三方Bean中写入诸如@service这样的注解,所以,Spring为我们提供了@Bean这一注解来让我们通过注解管理第三方Bean

?

第二种导入方式由于可读性太低,故只介绍第一种导入方式,这里我们以导入阿里巴巴的Druid为例?

由于直接在SpringConfig这个我们设计的Spring配置文件中写所有的文件会导致该文件十分臃肿,所以我们选用给每一个外部第三方Bean都书写他们独立的配置文件,下面看示例:

package com.cacb.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class JbdcConfig {
    //定义一个方法获得要管理的对象
    @Bean("dataSource")
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jbdc.Driver");
        ds.setUrl("jbdc:mysql://localhost:3306/cary_cacb");
        ds.setUsername("root");
        ds.setPassword("password");
        return ds;
    }
}

再看SpringConfig也就是核心配置类中的书写:

@Configuration
@Import(JbdcConfig.class)
public class SpringConfig {

}

可以看到我们通过@Import()注解来讲独立配置文件导入了核心配置文件?。

注解开发为第三方Bean注入资源

简单类型

海事使用上例,例如

        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jbdc.Driver");
        ds.setUrl("jbdc:mysql://localhost:3306/cary_cacb");
        ds.setUsername("root");
        ds.setPassword("password");

这些方法中传入的内容应该来自于Properties文件,所以我们应该使用注解注入这些类型,方法如下(只用classname举例)

@Value("com.mysql.jbdc.Driver")
private String classname;
//...

ds.setDriverClassName("com.mysql.jbdc.Driver");

引用类型

例如,我们要传入com.cacb.dao包中的BookDaoImpl这一Bean

首先,要使用注解将BookDaoImpl配置为Bean

package com.cacb.dao.Impl;

import com.cacb.dao.BookDao;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;

@Repository
public class BookDaoImpl implements BookDao {
    @Override
    public void save() {
        System.out.println("BookDao saving!");
    }
}

接下来,我们肯定是要让核心配置文件扫描这一包的

@ComponentScan("com.cacb.dao")

下面便是引用类型注解的特殊之处,我们需要向配置类传入相应的对象,?

public DataSource dataSource(BookDao bookDao)

?Spring按类型自动装配

文章来源:https://blog.csdn.net/Cary_cacb/article/details/135679193
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。