概述
Spring全注解开发
为了更为简化程序的开发Spring的IOC和DI都提供了相应的注解来替代复杂的xml配置文件。下面通过一个简单的案例来演示。
-
环境准备
-
创建一个Maven项目
-
在Pom.xml中添加依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency>
-
添加Dao和Service的模拟接口与其对应的实现类
//Dao接口 public interface Bookdao { public void save(); } //Dao实现类 public class BookdaoImpl implements Bookdao { public void save() { System.out.println("Bookdao ...run"); } } //Service接口 public interface Bookservice { public void save(); } //Service实现类:在内部调用了Dao方法 public class BookserviceImpl implements Bookservice { private Bookdao bookdao; public void setBookdao(Bookdao bookdao) { this.bookdao = bookdao; } public void save() { System.out.println("Boolservice ... run"); bookdao.save(); } //初始化方法 public void init(){ System.out.println("Bean创建成功"); } //销毁方法 public void destory(){ System.out.println("容器销毁"); } }
-
添加一个运行类App
public class App { public static void main(String[] args) { } }
-
注解开发定义Bean和定义配置类
-
添加配置注解
在用配置文件配置Spring中的Bean时,需要创建一个applicationContext.xml配置文件,再在配置文件中编写xml代码。使用注解只需要将一个类设置成配置类就行。具体如下:
@Configuration @ComponentScan("com.itheima") public class SpringConfig { }
-
在类上面添加**@Configuration**代表此类是一个Spring的配置类,可代替传统的applicationContext.xml配置文件。
-
@ComponentScan是用来设置此配置文件的作用范围,内部填写要设置的包名。代替了之前在配置文件中的
<context:component-scan base-package="com.itheima"/>
-
-
添加创建Bean注解
在要到Spring容器中配置Bean的类上添加**@Component**注解即可,我在Dao和Service实现类上添加。
//Dao配置Bean @Component("bookDao") public class BookdaoImpl implements Bookdao { public void save() { System.out.println("Bookdao ...run"); } } //Service配置Bean @Component0("bookService") public class BookserviceImpl implements Bookservice { private Bookdao bookdao; public void setBookdao(Bookdao bookdao) { this.bookdao = bookdao; } public void save() { System.out.println("Boolservice ... run"); bookdao.save(); } //初始化方法 public void init(){ System.out.println("Bean创建成功"); } //销毁方法 public void destory(){ System.out.println("容器销毁"); } }
添加@Component注解后,就可以调用Spring容器来创建相应的对象了。后面括号里的字符表示bean的id,可省略不写;不写的话会有一个默认的名称就是此类的名字,第一个字母小写。为了提高语义化,还可在对应的层用对应的注解来代替@ComPonent,有如下选择,它们的功能完全一样
@Component 设置Bean @Controller 在控制层设置Bean @Service 在表现层设置Bean @Repository 在数据层设置Bean -
代码测试
在运行类中测试一样,这里创建Spring容器的类和之前用配置文件创建容器使用的类不一样,具体代码如下public class App2 { public static void main(String[] args) { ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class); Bookservice bookService = (Bookservice) app.getBean(Bookservice.class); bookService.save(); } }
测试结果
注解开发定义Bean的生命周期。
-
@Scope设置bean的作用范围
在注解配置中的Bean默认是单例模式,要想Bean设置为多例模式,只需在类上面添加@Scope注解,在括号里进行相应设置:singleton单例;prototype非单例;//Service配置Bean @Component0("bookService") @Scope("prototype") public class BookserviceImpl implements Bookservice { private Bookdao bookdao; public void setBookdao(Bookdao bookdao) { this.bookdao = bookdao; } public void save() { System.out.println("Boolservice ... run"); bookdao.save(); } //初始化方法 public void init(){ System.out.println("Bean创建成功"); } //销毁方法 public void destory(){ System.out.println("容器销毁"); } }
-
注解设置初始方法和销毁方法,只需要在方法上面添加@PostConstruct和@PreDestroy即可。
//初始化方法 @PostConstruct public void init(){ System.out.println("Bean创建成功"); } //销毁方法 @PreDestroy public void destory(){ System.out.println("容器销毁"); }
可以看到,通过注解配置Spring要比用配置文件简单许多,下面来演示通过注解来进行Bean的依赖注入
注解开发依赖注入
-
引用类型依赖注入:
只需要在要注入的成员上加注解@Autowired,并且不需要set方法。此注解默认是按类型进行注入的,会自动在Spring中找到对应类型的Bean进行注入。@Repository @Scope("prototype") public class BookserviceImpl implements Bookservice { @Autowired private Bookdao bookdao; public void save() { System.out.println("Boolservice ... run"); bookdao.save(); } //初始化方法 public void init(){ System.out.println("Bean创建成功"); } //销毁方法 public void destory(){ System.out.println("容器销毁"); } }
当根据类型在容器中找到多个bean,注入参数的属性名又和容器中bean的名称不一致,这个时候就需要使用到
@Qualifier
来指定注入哪个名称的bean对象。@Qualifier是在@Autowired的基础上使用的。@Repository @Scope("prototype") public class BookserviceImpl implements Bookservice { @Autowired @Qualifier("bookDao")//括号内是Bean的id名 private Bookdao bookdao; public void save() { System.out.println("Boolservice ... run"); bookdao.save(); } //初始化方法 public void init(){ System.out.println("Bean创建成功"); } //销毁方法 public void destory(){ System.out.println("容器销毁"); } }
-
简单数据类型注入
简单类型注入的是基本数据类型或者字符串类型,下面在BookserviceImpl
类中添加一个name
属性,用其进行简单类型注入@Repository @Scope("prototype") public class BookserviceImpl implements Bookservice { @Autowired private Bookdao bookdao; public void setBookdao(Bookdao bookdao) { this.bookdao = bookdao; } @Value("张三") private String name; public void save() { System.out.println("Boolservice ... run"+name); bookdao.save(); } //初始化方法 public void init(){ System.out.println("Bean创建成功"); } //销毁方法 public void destory(){ System.out.println("容器销毁"); } }
在App类中运行结果如下:
-
@value一般会被用在从properties配置文件中读取内容进行使用。
-
在resources下创建一个properties文件,在内部写点键值对。
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis jdbc.username=root jdbc.password=1234
-
在配置类中加上@PropertySource()注解,将刚刚创建的properties文件引入
-
这样一来,Spring容器就可以读取到Properties文件了,在刚刚的代码中将@value注解中用${}来占位,里面填写键的值,就能把相应的值注入到变量中了
@Value("${jdbc.driver}") private String name;
- 运行App类
-
-
IOC/DI注解开发管理第三方bean
在使用注解开发时,管理第三方Bean主要是用@Bean来完成,具体操作如下,
-
用注解管理Druid数据源:
-
在pom.xml中添加Druid的依赖坐标
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>
-
在SpringConfig配置类中添加一个返回值为Bean的方法(本次案列是dataSource数据源对象)
@Configuration public class SpringConfig { public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/mybatis"); ds.setUsername("root"); ds.setPassword("1234"); return ds; } }
-
最后在方法名上添加@Bean注解就行了
@Configuration public class SpringConfig { @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/mybatis"); ds.setUsername("root"); ds.setPassword("1234"); return ds; } }
届时,有多少外部Bean要管理就配置几个方法就行了,但若是需要管理的Bean太多,就可以放在另外一个配置类,再通过
@Impoet
来引入到主配置类中,这样有利用Bena的管理。-
创建一个新的配置类,这里取名为jdbcConfig,在此类中定义返回值为Bean的方法,这里我还使用@Value配合Properties来给数据源的4要素进行赋值。
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; @Bean public DataSource getDataSource(Bookdao bookdao){ // bookdao.save(); DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }
-
最后在SpringConfig配置类中加上
@Import(jdbcConfig.class)
即可@Configuration @ComponentScan("com.itheima") @PropertySource("jdbc.properties") @Import(jdbcConfig.class) public class SpringConfig { }
-
在App类中演示一下
public class App4 { public static void main(String[] args) { AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class); DataSource bean = app.getBean(DataSource.class); System.out.println(bean); } }
- 演示结果:
最后总结一下注解开发和xml配置文件开发的区别
-
-
最后
以上就是发嗲电脑为你收集整理的Spring全注解开发Spring全注解开发的全部内容,希望文章能够帮你解决Spring全注解开发Spring全注解开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复