Spring IOC 常用注解与使用实例详解

网友投稿 312 2022-07-26


目录@Component@Autowired@Qualifier@Bean@ImportResource@Profile@PropertySource

@Component

注解@component代表spring ioc 会把这个类扫描生成Bean实例

@Component

public class Role{

@Value("1")

private Long id;

@Value("role_name_1")

private String roleName;

@Value("role_note_1")

private String note;

/***setter and getter****/

}

@Autowired

注解@Autowired代表在spring ioc 定位所有的Bean后,这个字段需要按类型来进行注入。

@Component

public class RoleImpl_1 implements RoleServer{

@Autowired

private Role role = null;

public .....

}

@Qualifier

​如果一个接口被两次实现,则使用@Autowired注解来进行该接口注入会产生异常,因为@Autowired无法确定要使用的是哪一个实现类。可以使用@Qualifier注解来进行歧义消除。

@Component

public class RoleController{

@Autowired

@Qualifier("roleImple_2")

private RoleServer server = null;

public .....

}

@Bean

​在注解都都是通过@component来进行装配Bean,但是@Component只能注解在类上,无法注解到方法上。而注解@Bean可以注解到方法上

@Bean(name = "dataSource")

public DataSource getDataSource(){

Properties props = new Properties();

props.setProperty("driver","com.mysql.cj.jdbc.Driver");

props.setProperty("url","jdbc:mysql://localhost:3306/db");

...

try{

dataSource = BasicDataSourceFactory.createDataSource(props);

}catch(Execption e){

e.printStackTrace();

}

return dataSource;

}

@Component

public class RoleController{

@Autowired(name = "dataSource")

private DataSource dataSource = null;

public .....

}

@ImportResource

​如果我们将DataSource使用xml配置文件来进行配置,我们就无法使用注解@Bean来进行装配。这时注fakQYAh解@ImportResource可以进行混合装配(将第三方的xml引入进来进行装配)。

.......

@ComponentScan(basePackages={"com.test"})

@ImportResource({"classpath:dbSource.xml"}) //将dbSource.xml配置文件装配到Ioc中来

public class ApplicationConfig{

}

@Component

public class RoleController{

@Autowired

private DataSource dataSource = null;

public .....

}

如果有多个xml文件,我们都想引用进来,可以在dbSource.xml配置文件中使用import元素来加载它

...........

.......

@Profile

​可以解决不同环境的切换需求,例如开发环境和测试环境不同,我们来看代码操作。

@Component

public class ProfileDataSource{

//开发环境

@Bean(name = "devDataSource")

@Profile("dev")

public DataSource getDevDataSource(){

......

}

//测试环境

@Bean(name = "testDataSource")

@Profile("test")

public DataSource getTestDataSource(){

......

}

}

当启动java配置Profile时,可以发现两个Bean并不会加载到IOC容器中,需要自行激活Profie。我们可以使用JVM启动目录或在集成测试环境中使用@ActiveProfiles进行定义

//使用@ActiveProfiles激活Profie

@RunWith(SpringJunit4ClassRunner.class)

@ContextConfiguration(classes=ProfileTest.class)

@ActiveProfiles("dev") //激活开发环境的Profile

public class ProfileTest{

}

//使用JVM参数激活Profie

JAVA_OPTS="-Dspring.profiles.active=test"

@PropertySource

可以使用注解@PropertySource来加载属性文件(properties)。

# dataSource.properties

jdbc.database.driver=com.mysql.cj.jdbc.Driver

jdbc.database.url=jdbc:mysql://localhost:3306/db

.......

@Configuration

@PropertySource(value = {"classpath:dataSource.properties"},{ignoreResourceNotFound=true})

public class ApplicationConfig{

}

ignoreResourceNotFound=true,如果找不到该属性文件则忽略它。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java数据结构之二叉搜索树详解(java实现二叉搜索树)
下一篇:Spring中的@Transactional的工作原理(spring actuator原理)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~