zoukankan      html  css  js  c++  java
  • java的配置方式简介

    1,java的配置方式简介
    java的配置方式是为了代替使用xml配置方式,
    主要使用两个注解:
    @Configuration//通过该注解来表明该类是一个spring的配置,相当于一个xml文件
    @ComponentScan(basePackages="com.SpringBoot.javaConfig")//配置扫码包

    设置bean的方式,既可以直接在bean类上面使用@Component,@Service
    也可在java配置类里面使用@bean,搭配类似如下方法代替xml中bean的配置:
    @Bean //通过该配置来表明是一个bean对象,相当于xml里面的<bean>

        //以下也可通过直接在User上面使用@Component代替
        @Bean    //通过该配置来表明是一个bean对象,相当于xml里面的<bean>
        public UserDAO getUserDAO()
        {
            return new UserDAO();//直接new对象做演示
        }

    初始化spring容器,由于不再使用配置文件了:

    ApplicationContext = new ClassPathXmlApplicationContext(xmlPath); 

    而是使用如下方式代替:

    AnnotationConfigApplicationContext context=
    new AnnotationConfigApplicationContext(SpringConfig.class);

    该方式,会通过SpringConfig这个配置类进行容器初始化。

    获取bean的方式,同样可以使用context.getBean(类.class)方式,如下:

    UserService userService=context.getBean(UserService.class);

    这种方式依然可以使用@Autowired等注解。

    这种java配置方式,完全不需要xml配置,简单易懂。


    二,读取外部的资源配置文件
    通过@propertySource可以读取指定的配置文件,通过@value注解获取值。具体用法:

    @propertySource(value={"classpath:jdbc.properties"})
    public class SpringConfig
    {
      @Value("${jdbc.url}")
      private String jdbcUrl;
    
      @Bean
      public UserDAO getUserDAO()
      {
        return new UserDAO();
      }
    }

    为了保证如果读取的配置文件不存在忽略他,加上属性:ignoreResourceNotFound=true
    如果多个配置文件,可以修改value值:

    @propertySource(value={"classpath:jdbc.properties","xxxx","xxxx"},ignoreResourceNotFound=true)

    实例:

    第一步:新建一个实体类:User

    package com.SpringBoot.javaConfig;
    
    public class User {
    
        private String username;
        private String password;
        private Integer age;
        
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
    }

    新建一个UserDAO模拟DAO数据库查询

    package com.SpringBoot.javaConfig;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.stereotype.Component;
    
    public class UserDAO {
        
        public List<User> queryUserList(){
            
            List<User> result=new ArrayList<User>();
            //模拟数据库查询
            for(int i=0;i<10;i++)
            {
                User user=new User();
                user.setUsername("username_"+i);
                user.setPassword("password_"+i);
                user.setAge(i+1);
                result.add(user);
            }
            return result; 
        }
    
    }

    第三步:新建一个UserService调用UserDAO

    package com.SpringBoot.javaConfig;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
        @Autowired
        //注入spring容器中的bean对象
        private UserDAO userDAO;
        
        public List<User> queryUserList(){
            return userDAO.queryUserList();
        }
    }

    最后一步:新建一个main方法测试:

    package com.SpringBoot.javaConfig;
    
    import java.util.List;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Main {
    
        public static void main(String[] args) {
            
            //通过java配置来管理Spring容器
            AnnotationConfigApplicationContext context=
                    new AnnotationConfigApplicationContext(SpringConfig.class);
            //在spring容器中获取bean对象
            UserService userService=context.getBean(UserService.class);
            
            //调用对象中的方法
            List<User> list=userService.queryUserList();
            for(User user:list)
            {
                System.out.println(user.getUsername()+","+user.getPassword()+","+user.getAge());
            }
            
            //销毁容器
            context.destroy();
        }
    
    }
  • 相关阅读:
    Java面试题 OOAD & UML+XML+SQL+JDBC & Hibernate
    Java面试题 corejava(二)
    Java面试题 corejava(一)
    Java 笔试题(一)
    大数据离线分析平台 用户数据Etl
    Spfa【p1186】 玛丽卡
    牛客nowcoder Noip提高组第四场
    分层图【p4568】 [JLOI2011]飞行路线
    10.06 国庆节第九场模拟赛
    10.04 国庆节第七场模拟赛
  • 原文地址:https://www.cnblogs.com/alsf/p/9321113.html
Copyright © 2011-2022 走看看