SpringIOC常用注解与使用

博客 动态
0 180
优雅殿下
优雅殿下 2022-06-05 00:00:06
悬赏:0 积分 收藏

Spring IOC 常用注解与使用

@Component

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

@Componentpublic 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后,这个字段需要按类型来进行注入。

@Componentpublic class RoleImpl_1 implements RoleServer{    @Autowired    private Role role = null;        public .....}

@Qualifier

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

@Componentpublic 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;}
@Componentpublic class RoleController{    @Autowired(name = "dataSource")    private DataSource dataSource = null;        public .....}

@ImportResource

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

<!--dbSource.xml--><bean id="dataSource" >	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>	<property name="url" value="jdbc:mysql://localhost:3306/db"/>    .......</bean>
@ComponentScan(basePackages={"com.test"})@ImportResource({"classpath:dbSource.xml"})  //将dbSource.xml配置文件装配到Ioc中来public class ApplicationConfig{}
@Componentpublic class RoleController{    @Autowired    private DataSource dataSource = null;      public .....}

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

<!--spring-dataSource.xml-->...........
<!--dbSource.xml--><bean id="dataSource" >	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>	<property name="url" value="jdbc:mysql://localhost:3306/db"/>    .......</bean><import resourse="spring-dataSource.xml"/>

@Profile

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

@Componentpublic 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")  //激活开发环境的Profilepublic class ProfileTest{    }
//使用JVM参数激活ProfieJAVA_OPTS="-Dspring.profiles.active=test"

@PropertySource

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

# dataSource.propertiesjdbc.database.driver=com.mysql.cj.jdbc.Driverjdbc.database.url=jdbc:mysql://localhost:3306/db.......
@Configuration@PropertySource(value = {"classpath:dataSource.properties"},{ignoreResourceNotFound=true})public class ApplicationConfig{    }

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

posted @ 2022-06-04 23:21 Aircoinst 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员