一、环境准备
先来准备下环境:
最终创建好的项目结构如下:
二、注解开发定义bean
在上述环境的基础上,我们来看一看Spring是如何通过注解实现bean的定义开发?
步骤1:删除原XML配置
将配置文件中的标签删除掉
步骤2:Dao上添加注解
在BookDaoImpl类上添加@Component注解
@Component("bookDao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ..." );
}
}
注意:@Component注解不可以添加在接口上,因为接口是无法创建对象的。
XML与注解配置的对应关系:
步骤3:配置Spring的注解包扫描
为了让Spring框架能够扫描到写在类上的注解,需要在配置文件上进行包扫描
说明:
component-scan
base-package指定Spring框架扫描的包路径,它会扫描指定包及其子包中的所有类上的注解。
步骤4:运行程序
运行App类查看打印结果
步骤5:Service上添加注解
在BookServiceImpl类上也添加@Component交给Spring框架管理
@Component
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
步骤6:运行程序
在App类中,从IOC容器中获取BookServiceImpl对应的bean对象,打印
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
System.out.println(bookDao);
//按类型获取bean
BookService bookService = ctx.getBean(BookService.class);
System.out.println(bookService);
}
}
打印观察结果,两个bean对象都已经打印到控制台
说明:
对于@Component注解,还衍生出了其他三个注解@Controller、@Service、@Repository
通过查看源码会发现:
这三个注解和@Component注解的作用是一样的,为什么要衍生出这三个呢?
方便我们后期在编写类的时候能很好的区分出这个类是属于表现层、业务层还是数据层的类。
知识点1:@Component等名称@Component/@Controller/@Service/@Repository
类型
类注解
位置
类定义上方
作用
设置该类为spring管理的bean
属性
value(默认):定义bean的id
三、纯注解开发模式
上面已经可以使用注解来配置bean,但是依然有用到配置文件,在配置文件中对包进行了扫描,Spring在3.0版已经支持纯注解开发
具体如何实现?
3.1 思路分析
实现思路为:
3.2 实现步骤步骤1:创建配置类
创建一个配置类SpringConfig
public class SpringConfig {
}
步骤2:标识该类为配置类
在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml
@Configuration
public class SpringConfig {
}
步骤3:用注解替换包扫描配置
在配置类上添加包扫描注解@ComponentScan替换
@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}
步骤4:创建运行类并执行
创建一个新的运行类AppForAnnotation
public class AppForAnnotation {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
System.out.println(bookDao);
BookService bookService = ctx.getBean(BookService.class);
System.out.println(bookService);
}
}
运行AppForAnnotation,可以看到两个对象依然被获取成功
至此,纯注解开发的方式就已经完成了,主要内容包括:
知识点1:@Configuration名称@Configuration
类型
类注解
位置
类定义上方
作用
设置该类为spring配置类
属性
value(默认):定义bean的id
知识点2:@ComponentScan名称@ComponentScan
类型
类注解
位置
类定义上方
作用
设置spring配置类扫描路径,用于加载使用注解格式定义的bean
属性
value(默认):扫描路径,此路径可以逐层向下扫描
四、小结
暂无评论内容