1. Spring 5.X应用零配置开发
Spring 框架从5.x版本推荐使用注解形式来对java应用程序进行开发与配置,并且可以完全替代原始的XML+注解形式的开发,在使用注解形式进行项目开发与环境配置时,Spring框架提供了针对环境配置与业务bean开发相关注解。
注解
声明Bean注解
@Component: 组件没有明确规定其角色,作用在类级别上声明当前类为一个业务组件,被Spring Ioc容器维护 。
@Service: 在业务逻辑层(Service 层)类级别进行声明 。
@Repository: 在数据访问层(dao 层) 类级别声明 。
@Controller: 在展现层(MVC) 使用,标注当前类为一个控制器。
注入Bean注解
@AutoWired: Spring官方提供注解 。
@Inject: JSR-330提供注解(标准制定方) 。
@Resource: JSR-250提供注解。
注意:在Set方法或属性上声明,一般情况下通用一般开发中更习惯声明在属性上。
Spring5.x中配置与获取Bean注解
@Configuration: 作用与类上,将当前类声明为一个配置类,相当于一个xml配置文件。
@ComponentScan: 自动扫描指定包下标注有。
@Repository,@Service,@Controller @Component: 注解的类并由Ioc容器进行实例化和维护 。
@Bean: 作用于方法上,相当于xml 文件中<bean> 声明当前方法返回值为一个bean 。
@Value: 获取properties文件指定key,value值。
-
IOC中Bean的实例化与获取
通过实例化AnnotationConfigApplicationContext类,接收配置参数类IocConfig,并获取UserService Bean实现方法调用。 1.在pom.xml中添加坐标相关配置 <dependencies> <!-- spring的依赖坐标 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.4.RELEASE</version> </dependency> </dependencies> <build> <plugins> <!-- 指定Maven编译的JDK版本和编码 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <!-- 源代码使用的JDK版本 --> <source>11</source> <!-- 需要生成的目标class文件的编译版本 --> <target>11</target> <!-- 字符集编码 --> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build> 2.创建Bean对象 UserDao.java和UserService.java 3.创建IocConfig配置类 //将当前类声明为一个配置类 @Configuration //设置扫描包范围 @ComponentScan("com.yjxxt.springboot") public class IocConfig { } 4.创建启动类执行测试 public class Starter { public static void main(String[] args) { //基于Java的配置类加载Spring的应用上下文 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(IocConfig.class); //获取指定的Bean对象 UserService userService = ac.getBean(UserService.class); //调用Bean对象的方法 userService.test(); } }
-
@Bean注解使用
使用@Bean注解声明在方法(注意:方法名一般为bean对象名称)级别用于返回实例化的Bean对象。 1.创建Bean对象 AccountDao.java 2.修改IocConfig配置类 @Configuration @ComponentScan("com.yjxxt.springboot") public class IocConfig02 { //返回实例化的单例Bean对象 @Bean public AccountDao accountDao(){ return new AccountDao(); } } 3.创建启动类并执行测试 public class Starter02 { public static void main(String[] args) { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(IocConfig.class); //判断IocConfig对象是否是单例 System.out.println(ac.isSingleton("IocConfig")); //获取IocConfig对象 IocConfig iocConfig = ac.getBean(IocConfig.class); //获取AccountDao对象 AccountDao accountDao01 = iocConfig.accountDao(); AccountDao accountDao02 = iocConfig.accountDao(); System.out.println(accountDao01 + "," + accountDao02); accountDao01.test(); } }
-
读取外部配置文件
通过@PropertySource注解声明到类级别来指定读取相关配置。 1.准备配置文件 user.properties # user.properties user.userName=admin user.password=admin jdbc.properties # jdbc.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/hr? useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=root 2.@PropertySource加载配置文件 properties配置文件 @Configuration @ComponentScan("com.yjxxt") @PropertySource(value = {"classpath:jdbc.properties","classpath:user.properties"}) public class IocConfig03 { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; // 控制台打印属性值信息 public void showConfigInfo(){ System.out.println("driver:" + driver + ",url:" + url); System.out.println("userName:" + userName + ",password:" + password); } } 3.其他Bean对象获取properties文件内容 @Service public class UserService { @Resource private UserDao userDao; @Value("${user.userName}") private String userName; @Value("${user.password}") private String password; public void test(){ System.out.println("UserServ