首页 > 其他分享 >基于注解的 IOC 配置

基于注解的 IOC 配置

时间:2022-12-23 13:11:42浏览次数:49  
标签:基于 spring value public bean 注解 IOC ds

使用步骤

1、导入依赖

  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
  </dependency>

2、创建 spring 的 xml 配置文件并开启对注解的支持

<?xml version="1.0" encoding="UTF-8"?>
<!--        基于注解整合时,导入约束时需要多导入一个 context 名称空间下的约束。-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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">
    <!-- 告知 spring 创建容器时要扫描的包 -->
    <context:component-scan base-package="com.itheima"/>
</beans>

3、使用注解配置管理的资源

@Component("accountService")
public class AccountServiceImpl implements IAccountService {
    private IAccountDao accountDao;
    public void setAccountDao(IAccountDao accountDao) {
        this.accountDao = accountDao;
    }
}

常用注解

用于创建对象的
    相当于:<bean id="" class="">
    @Component
        作用:
            把资源让 spring 来管理。相当于在 xml 中配置一个 bean。
        属性:
            value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名,首字母小写。
    @Controller @Service @Repository
        他们三个注解都是针对第一个的衍生注解,他们的作用及属性都是一模一样的。
        他们只不过是提供了更加明确的语义化。
        @Controller:一般用于表现层的注解。
        @Service:一般用于业务层的注解。
        @Repository:一般用于持久层的注解。
        细节:如果注解中有且只有一个属性要赋值时,且名称是 value,value 在赋值是可以不写。
用于注入数据的
    相当于:<property name="" ref=""> 
           <property name="" value="">
    @Autowired
        作用:
            自动按照类型注入。当使用注解注入属性时,set 方法可以省略,它只能注入其他 bean 类型。
            当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在 spring 容器查找,找到了也可以注入成功,找不到就报错。
    @Qualifier
        作用:
            在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。
            它在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。
        属性:
            value:指定 bean 的 id。
    @Resource
        作用:
            直接按照 Bean 的 id 注入。它也只能注入其他 bean 类型。
        属性:
            name:指定 bean 的 id。
    @Value
        作用:
            注入基本数据类型和 String 类型数据的
        属性:
            value:用于指定值
用于改变作用范围的:
    相当于:<bean id="" class="" scope="">
    @Scope
        作用:
            指定 bean 的作用范围。
        属性:
            value:指定范围的值。
            取值:singleton prototype request session globalsession
和生命周期相关的:(了解) 
    相当于:<bean id="" class="" init-method="" destroy-method="" />
    @PostConstruct
        作用:
            用于指定初始化方法。
    @PreDestroy
        作用:
            用于指定销毁方法。

新注解说明

@Configuration
    作用:
        用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用
        AnnotationApplicationContext(有@Configuration 注解的类.class)。
    属性:
        value:用于指定配置类的字节码

    /**
    * spring 的配置类,相当于 bean.xml 文件
    */
    @Configuration
    public class SpringConfiguration {
    }

@ComponentScan
    作用:
        用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:
        <context:component-scan base-package="com.itheima"/>是一样的。
    属性:
        basePackages:用于指定要扫描的包。和该注解中的 value 属性作用一样。

    /**
    * spring 的配置类,相当于 bean.xml 文件
    */
    @Configuration
    @ComponentScan("com.itheima")
    public class SpringConfiguration {
    }
@Bean
    作用:
        该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。
    属性:
        name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。

    public class JdbcConfig {
        /**
        * 创建一个数据源,并存入 spring 容器中
        * @return
        */
        @Bean(name="dataSource")
        public DataSource createDataSource() {
            try {
                ComboPooledDataSource ds = new ComboPooledDataSource();
                ds.setUser("root");
                ds.setPassword("1234");
                ds.setDriverClass("com.mysql.jdbc.Driver");
                ds.setJdbcUrl("jdbc:mysql:///spring_day02");
                return ds;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
@PropertySource
    作用:
        用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到
        properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。
    属性:
        value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath:

    /**
    * 连接数据库的配置类
    */
    @PropertySource("classpath:jdbc.properties")
    public class JdbcConfig {
        @Value("${jdbc.driver}")
        private String driver;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String username;
        @Value("${jdbc.password}")
        private String password;
        /**
        * 创建一个数据源,并存入 spring 容器中
        * @return
        */
        @Bean(name="dataSource")
        public DataSource createDataSource() {
            try {
                ComboPooledDataSource ds = new ComboPooledDataSource();
                ds.setDriverClass(driver);
                ds.setJdbcUrl(url);
                ds.setUser(username);
                ds.setPassword(password);
                return ds;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
@Import
    作用:
        用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解,当然,写上也没问题。
    属性:
        value[]:用于指定其他配置类的字节码。

    @Configuration
    @ComponentScan(basePackages = "com.itheima.spring")
    @Import({ JdbcConfig.class})
    public class SpringConfiguration {
    }

    @Configuration
    @PropertySource("classpath:jdbc.properties")
    public class JdbcConfig{
    }

通过注解获取容器

ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

标签:基于,spring,value,public,bean,注解,IOC,ds
From: https://www.cnblogs.com/yanshiheng/p/17000452.html

相关文章