注解开发Bean
在前面的内容中 , 我们的bean在xml配置文件中装配
在后期 , 我们的bean可以采用注解的形式 , 直接在实现类中注解表示为bean
我们采用@Component定义bean , 可以添加参数表示id , 也可以不添加参数 , 后期我们采用class类的类型来进行匹配
package com.itheima.dao.impl; import com.itheima.dao.BookDao; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Repository; //@Component定义bean @Component("bookDao") public class BookDaoImpl implements BookDao { public void save() { System.out.println("book dao save ..."); } }
package com.itheima.service.impl; import com.itheima.dao.BookDao; import com.itheima.service.BookService; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; //@Component定义bean @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(); } }
@Componenty延伸出了三种类型 , 在实现手法上是一致 , 但可以具体使用于各种类中(仅用于自我识别)
- @Controller:用于表现层bean定义
- @Service:用于业务层bean定义
- @Repository:用于数据层定义
package com.itheima.dao.impl; import com.itheima.dao.BookDao; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Repository; //@Component定义bean //@Component("bookDao") //@Repository:@Component衍生注解 @Repository("bookDao") public class BookDaoImpl implements BookDao { public void save() { System.out.println("book dao save ..."); } }
package com.itheima.service.impl; import com.itheima.dao.BookDao; import com.itheima.service.BookService; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; //@Component定义bean //@Component //@Service:@Component衍生注解 @Service 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(); } }
但是 , 在上述情况下 , 即使我们将@Component的类定义为bean
我们的xml文件是无法探测到的 , 所以我们需要配置相关扫描组件来扫描bean
纯注解开发
我们前面所提到的注解开发属于2.5的附属版本
在Spring3.0版本 , Spring就提供了纯注解开发模式 , 利用java类代替配置文件 , 开启了Spring快速开发时代
在之前我们的xml配置文件是很繁琐的:
但是我们可以通过创建单独的类来表示配置文件:
- @Configuration:用于声明当前类为Spring配置类
- @ComponentScan:用于扫描类文件(类似于)
package com.itheima.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; //声明当前类为Spring配置类 @Configuration //设置bean扫描路径 , 多个路径书写为字符串数组格式 @ComponentScan({"com.itheima.service","com.itheima.dao"}) public class SpringConfig { }
注意:因为该类属于配置类 , 我们通常单列一个文件夹来表示 常用文件夹:config 命名规范:SpringConfig,UserConfig...
因为我们的开发不再依靠于xml配置文件 , 所以在主函数中的Spring容器获得方式也发生了改变:
package com.itheima; import com.itheima.dao.BookDao; import com.itheima.service.BookService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { // 这是我们之前的获取方式 , 采用路径获取xml文件 // ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); // 这是新的获取方式 , 直接提供配置类的类型 // AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器 ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); // 后面操作无需变化 BookDao bookDao = (BookDao) ctx.getBean("bookDao"); System.out.println(bookDao); //按类型获取bean BookService bookService = ctx.getBean(BookService.class); System.out.println(bookService); } }
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 柠檬水什么时候喝最好 柠檬水什么时候喝好
- 我想念你(我想念你的句子)
- 黄子韬|黄子韬徐艺洋见家长疑同居,还不承认恋情,再怎么嘴硬都无济于事
- 完美日记|这届双11,完美日记为啥“隐身”了?
- 玄奘有什么身世 ? 玄奘的身世
- 手机导航究竟哪个更好用 手机导航哪个好用
- 指甲白色月牙变少,指甲的月牙白越来越多-
- 戴尔台式机评测 戴尔台式机
- 绿松石|绿松石与藏族金轮
- |艺术家徐耀——淡雅脱俗 赏心悦目