深入理解java的spring-ioc的使用

 更新时间:2019年03月12日 15:31:36   作者:张占岭(仓储大叔,Lind)   我要评论

这篇文章主要介绍了java的spring-ioc的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

spring-ioc的使用

IOC容器在很多框架里都在使用,而在spring里它被应用的最大广泛,在框架层面上,很多功能都使用了ioc技术,下面我们看一下ioc的使用方法。

  1. 把服务注册到ioc容器
  2. 使用属性注入反射对应类型的实例
  3. 多态情况下,使用名称反射类型的实例

把服务注册到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的使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • springboot配置多数据源的实例(MongoDB主从)

    springboot配置多数据源的实例(MongoDB主从)

    下面小编就为大家分享一篇springboot配置多数据源的实例(MongoDB主从),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java多线程Atomic包操作原子变量与原子类详解

    Java多线程Atomic包操作原子变量与原子类详解

    这篇文章主要介绍了Java多线程Atomic包操作原子变量与原子类详解,简单介绍了Atomic,同时涉及java.util.concurrent中的原子变量,Atomic类的作用等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 浅谈java获取UUID与UUID的校验

    浅谈java获取UUID与UUID的校验

    这篇文章主要介绍了java获取UUID与UUID的校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 简单谈谈Java中的方法和方法重载

    简单谈谈Java中的方法和方法重载

    下面小编就为大家带来一篇简单谈谈Java中的方法和方法重载。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java生成图形验证码工具类

    Java生成图形验证码工具类

    这篇文章主要介绍了Java生成图形验证码工具类,本文思路明确介绍的非常详细,需要的朋友可以参考下
    2017-02-02
  • Java中的小知识点总结

    Java中的小知识点总结

    最近在复习Java的基础,遇到了一些比较偏的考核题目,特地总结一下需要注意的知识点!不过在使用IDE编程的时候,这些问题都会马上被IDE识别出来,编译是通不过的。我在这里提出来就相当于给初学者一些贡献吧
    2013-07-07
  • Java的Struts2框架配合Ext JS处理JSON数据的使用示例

    Java的Struts2框架配合Ext JS处理JSON数据的使用示例

    这篇文章主要介绍了Java的Struts2框架配合Ext JS处理JSON数据的使用示例,包括将Ext JS中的JSON数据解析为列表的方法,需要的朋友可以参考下
    2016-03-03
  • java  LinkedList源码详解及实例

    java LinkedList源码详解及实例

    这篇文章主要介绍了java LinkedList源码详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • JSONObject与JSONArray的使用

    JSONObject与JSONArray的使用

    这篇文章主要介绍了JSONObject与JSONArray的使用 的相关资料,需要的朋友可以参考下
    2016-06-06
  • java语言图形用户登录界面代码

    java语言图形用户登录界面代码

    这篇文章主要为大家详细介绍了java语言图形用户登录界面代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06

最新评论