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里面的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 ListqueryUserList(){ List result=new ArrayList (); //模拟数据库查询 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;@Servicepublic class UserService { @Autowired //注入spring容器中的bean对象 private UserDAO userDAO; public ListqueryUserList(){ 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); //调用对象中的方法 Listlist=userService.queryUserList(); for(User user:list) { System.out.println(user.getUsername()+","+user.getPassword()+","+user.getAge()); } //销毁容器 context.destroy(); }}