spring-ioc的使用
IOC容器在很多框架里都在使用,而在spring里它被应用的最大广泛,在框架层面上,很多功能都使用了ioc技术,下面我们看一下ioc的使用方法。
把服务注册到ioc容器
@Bean注册组件
使用@Bean注解进行类型的注册,默认你的ioc容器里类型为bean的返回值,名称为bean所有的方法名,与你的包名称没有直接关系,如果你的接口有多种实现,在注册时可以使用@Bean("lind")这种方式来声明。
@Component,@Configuration,Service,Repository注册组件
这几个注解都是在类上面声明的,而@Bean是声明在方法上的,这一点要注意,这几个注解一般是指对一个接口的实现,在实现类上加这些注解,例如,一个数据仓储接口UserRepository,它可以有多种数据持久化的方式,如SqlUserRepositoryImpl和MongoUserRepositoryImpl,那么在注册时你需要为他们起一个别名,如@Repository("Sql-UserRepositoryImpl) qlUserRepositoryImpl,默认的名称是类名,但注意类名首字母为小写。
public interface EmailLogService { void send(String email, String message); } @Component() public class EmailLogServiceHttpImpl implements EmailLogService { private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceHttpImpl.class); @Override public void send(String email, String message) { Assert.notNull(email, "email must not be null!"); logger.info("send email:{},message:{}", email, message); } } @Component("email-socket") public class EmailLogServiceSocketImpl implements EmailLogService { private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceSocketImpl.class); @Override public void send(String email, String message) { Assert.notNull(email, "email must not be null!"); logger.info("send email2:{},message:{}", email, message); } } // 看一下调用时的测试代码 @Resource(name = "email-socket") EmailLogService socketEmail; @Autowired @Qualifier( "emailLogServiceHttpImpl") EmailLogService httpEmail; @Test public void testIoc2() { socketEmail.send("ok", "ok"); } @Test public void testIoc1() { httpEmail.send("ok", "ok"); }
在程序中使用bean对象
1.使用Resource装配bean对象
在通过别名调用bean时,你可以使用@Resource注解来装配对象
2.使用@Autowired装配bean对象
也可以使用 @Autowired
@Qualifier( "emailLogServiceHttpImpl")两个注解去实现程序中的多态。
使用场景
在我们有些相同行为而实现方式不同的场景中,如版本1接口与版本2接口,在get方法实现有所不同,而这
两个版本都要同时保留,这时我们需要遵守开闭原则,扩展一个新的接口,而在业务上对代码进行重构,
提取两个版本相同的方法到基类,自己维护各自独有的方法,在为它们的bean起个名字,在装配时,通过
bean的名称进行装配即可。
写个伪代码:
class Api_version1(){ @Autowired @Qualifier("print-version1") PrintService printService; } class Api_version2(){ @Autowired @Qualifier("print-version2") PrintService printService; } class BasePrintService{} interface PrintService{} @Service("print-version1") class PrintServiceImplVersion1 extends BasePrintService implements PrintService{} @Service("print-version2") class PrintServiceImplVersion2 extends BasePrintService implements PrintService{}
以上所述是小编给大家介绍的java的spring-ioc的使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍Spring-cloud Feign 的深入理解,包括了Spring-cloud Feign 的深入理解的使用技巧和注意事项,需要的朋友参考一下 feign的调用流程 读取注解信息:EnableFeignClients-->FeignClientsRegistrar-->FeignClientFactoryBean feigh流程:ReflectiveFeign-->Contract
本文向大家介绍深入理解Java IO的flush,包括了深入理解Java IO的flush的使用技巧和注意事项,需要的朋友参考一下 Java的IO是一个大知识点, 如果把它的知识点拆开来说的话估计能说一个星期,关于IO的体系可以看看下面这张图, 接下来我们从一段代码开始聊吧,先看看下面这段代码 代码中构造了一个缓冲流,然后往流里写入一个KB长度的数据,最后调用 flush()方法。 这是很简单的一
本文向大家介绍深入理解Spring AOP,包括了深入理解Spring AOP的使用技巧和注意事项,需要的朋友参考一下 一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就来学习一下。 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object O
本文向大家介绍深入理解Spring Boot的日志管理,包括了深入理解Spring Boot的日志管理的使用技巧和注意事项,需要的朋友参考一下 前言 Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持, 如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出
本文向大家介绍深入理解java中Arrays.sort()的用法,包括了深入理解java中Arrays.sort()的用法的使用技巧和注意事项,需要的朋友参考一下 Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。 但是sort()的参数有好几种,基本上是大同小异,下面是以int型数组为例的Arrays.sort()的典型用法
本文向大家介绍深入理解Java中的弱引用,包括了深入理解Java中的弱引用的使用技巧和注意事项,需要的朋友参考一下 不久之前,我面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。 然而事与愿违,我很吃惊的发现,在将近20多个有着平均