zoukankan      html  css  js  c++  java
  • Spring IoC 容器配置(全注解方式 )

    去除applicationContext.xml实现简单的spring,把bean交给spring容器管理,获取属性的注入

    定义一个配置类:

    @Configuration

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

    @ComponentScan

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

    @Configuration
    @ComponentScan(basePackages = "com.zl.spring") //类似于xml中<context:component-scan> 扫描注解
    //加载多个文件//@ComponentScan(basePackages = {"",""})
    @Import(JdbcConfig.class) //导入其他配置类
    public class SpringConfiguration {
    
    }

    @Import

     用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题

    @PropertySource

     用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。

    @Bean

     该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。把这个方法的返回的对象添加到Spring容器

    //可写可不写,提高可读性
    @Configuration
    @PropertySource("classpath:db.properties") //加载properties中的文件,classpath: 类路径
    public class JdbcConfig {
        @Value("${jdbc.driverClassName}")
        private String driverClass;
        @Value("${jdbc.url}")
        private String jdbcUrl;
        @Value("${jdbc.user}")
        private String username;
        @Value("${jdbc.password}")
        private String password;
        //给连接池的数据源:  c3p0 赋四大参数
        @Bean("dataSource")
        public DataSource createDataSource() {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            try {
                ds.setDriverClass(driverClass);
                ds.setJdbcUrl(jdbcUrl);
                ds.setUser(username);
                ds.setPassword(password);
            } catch (PropertyVetoException e) {
                e.printStackTrace();
                return null;
            }
            return ds;
        }
        //给Dbutils工具类,注入添加数据源
        @Bean("queryRunner")
        @Scope("prototype") //设置为多例
        public QueryRunner createQueryRunner(@Qualifier("dataSource") DataSource ds) { //获取制定数据源,每次都拿同一个数据源
            return new QueryRunner(ds);
        }
    }

    userDaoImpl同样的获取方式:

    @Repository("userDao")
    public class UserDaoImpl implements IUserDao {
        @Autowired  //根据类型   推荐使用
        @Qualifier("queryRunner") //根据id
        private QueryRunner runner;

    userServiceImpl同样的获取方式:

    @Service("userService")
    public class UserServiceImpl implements IUserService {
        //使用@Resource 注解实现注入 ,不写name按类型
        @Resource(name="userDao")
        private IUserDao userDao;

    测试类:使用  AnnotationConfigApplicationContext 获取 ApplicationContext 对象

    private IUserService userService;
        @Before
        public void setUp() throws Exception {
            ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
             userService = applicationContext.getBean(IUserService.class);
        }
  • 相关阅读:
    c#实现串口操作 SerialPort
    ASP.NET Core 上传大文件无法接收的问题
    如何将qlv格式的腾讯视频转换为mp4格式
    C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉
    LGPL 与GPL的区别
    ffmpeg
    HTTP协议/RTSP协议/RTMP协议的区别
    C#写的CRC16检验算法
    VS里属性窗口中的生成操作释义
    iOS:APNS推送主要代码
  • 原文地址:https://www.cnblogs.com/64Byte/p/13088528.html
Copyright © 2011-2022 走看看