当前位置: 首页 > news >正文

南阳网站建设价格/镇江网站制作公司

南阳网站建设价格,镇江网站制作公司,html做的宠物网站,国外网站建设平台Spring IoC所解决的问题 Spring IoC(Inversion of Control),即控制反转,也叫依赖注入DI(Dependency Injection)是将程序的控制权交给了Spring容器,从而达到控制的反转。 IoC降低了程序之间的耦合度。在不使用Spring框架的前提下&#xff0c…

Spring IoC所解决的问题

Spring IoC(Inversion of Control),即控制反转,也叫依赖注入DI(Dependency Injection)是将程序的控制权交给了Spring容器,从而达到控制的反转。

  • IoC降低了程序之间的耦合度。在不使用Spring框架的前提下,我们必须以创建对象的方式对两个类进行强耦合,这样,会导致我们程序的健壮性太低。如果我们程序所依赖的类出现问题,那么程序就有可能无法进行编译。而把对象创建的权利交给Spring,降低了程序之间的耦合度。
  • 程序员不需要考虑对象的创建管理,而更加专注于业务逻辑。

实现步骤

Spring提供了两种IoC容器:ApplicationContext和BeanFactory。这篇博客简单的写一个简单的Bean工厂。步骤如下:

  1. 读取xml文件,解析节点,得到类名和属性名
  2. 利用反射和类加载创建该类的实例并设置其属性值
  3. 创建set方法利用set方法进行注入

程序代码

由于我们需要对xml文件进行解析,所以这里要引入Dom4j.jar。

  1. 最重要的一点,编写自定义的配置文件。这里仿照Spring的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans><bean id="studentDao" class="com.spring.dao.impl.StudentDao"><property name="str" value="我是学生"></property></bean><bean id="teacherDao" class="com.spring.dao.impl.TeacherDao"><property name="str" value="我是老师"></property></bean></beans>
  1. 实现IoC的核心代码。
package com.spring.core;import java.io.File;
import java.lang.reflect.Field;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class BeanFactory {private Document document;String contextConfigLocation = "src/spring.xml";public BeanFactory() {File file = new File(contextConfigLocation);SAXReader reader = new SAXReader();try {document = reader.read(file);} catch (DocumentException e) {e.printStackTrace();}}public Object getBean(String beanName) {Element root = document.getRootElement();List<Element> elements = root.elements();String beanLocation = null;String beanPropertyName = null;String beanPropertyVal  = null;for(Element e : elements) {if(e.attributeValue("id").equals(beanName)) {beanLocation = e.attributeValue("class");List<Element> propertyElements = e.elements();for(Element pE : propertyElements) {beanPropertyName = pE.attributeValue("name");beanPropertyVal = pE.attributeValue("value");}}}try {Class<?> clazz = Class.forName(beanLocation);Object obj = clazz.newInstance();Field field = clazz.getDeclaredField(beanPropertyName);field.setAccessible(true);field.set(obj, beanPropertyVal);return obj;} catch (ClassNotFoundException e1) {System.out.println(beanLocation + "类未找到");} catch (InstantiationException e1) {e1.printStackTrace();} catch (IllegalAccessException e1) {e1.printStackTrace();} catch (IllegalArgumentException e1) {e1.printStackTrace();} catch (NoSuchFieldException e1) {e1.printStackTrace();} catch (SecurityException e1) {e1.printStackTrace();}return null;}}
  1. DAO层实现
//IuserDao.java
package com.spring.dao;public interface IUserDao {public void print();}//StudentDao.java
package com.spring.dao.impl;import com.spring.dao.IUserDao;public class StudentDao implements IUserDao{String str;@Overridepublic void print() {System.out.println(str);}}//TeacherDao.java
package com.spring.dao.impl;import com.spring.dao.IUserDao;public class TeacherDao implements IUserDao{String str;@Overridepublic void print() {System.out.println(str);}}
  1. Service层实现
package com.spring.service;import com.spring.dao.IUserDao;public class UserService {private IUserDao userDao;//我们要使用set方法手动注入public void setUserDao(IUserDao userDao) {this.userDao = userDao;}public void print() {System.out.println("我是service层方法");userDao.print();}}
  1. Controller层实现。
package com.spring.controller;import com.spring.core.BeanFactory;
import com.spring.dao.impl.TeacherDao;
import com.spring.service.UserService;public class TestController {public static void main(String[] args) {BeanFactory beanFactory = new BeanFactory();UserService userService = new UserService();//这里是我们程序运行时需要更改的地方userService.setUserDao((IUserDao)beanFactory.getBean("teacherDao"));userService.print();}}

程序测试

我们只需改变其所注入的Bean的名称。
在这里插入图片描述
在这里插入图片描述

http://www.lbrq.cn/news/1080127.html

相关文章:

  • py和php做网站哪个好/八大营销方式有哪几种
  • 乐清高端网站建设/外贸营销型网站制作
  • wordpress 糗百/seo优化分析
  • 网页设计和网站开发/网站seo方案模板
  • 百度一直不收录网站/wifi优化大师下载
  • 武汉推广系统/四川旅游seo整站优化站优化
  • 做简单的html网站/郑州网站推广哪家专业
  • 怎么让自己做的网站让别人看到/什么是搜索推广
  • 个人域名可以做KTV网站吗/做直销去哪里找客户
  • 济宁建设局网站招聘会/如何购买域名
  • 磁贴式网站模板/seo是什么岗位
  • 微信端网站开发流程/百度seo点击器
  • 网站开发 培训/经典软文推广案例
  • 吉安哪家做网站的公司好/seo岗位有哪些
  • 手机app网站建设/seo外链软件
  • 局域网即时通讯软件排名/亚马逊seo推广
  • 广州做响应式网站多少钱/今日新闻最新消息大事
  • 杭州网站建设公司联系方式/pc网站优化排名软件
  • 网站策划书是什么/网站seo运营
  • 深圳个人网站设计/网站推广哪个好
  • 微信网站前景/培训网站源码
  • 普升高端品牌网站建设/百度认证有什么用
  • 论坛类网站搭建/手机清理优化软件排名
  • 免费建靓号网站/百度竞价广告怎么投放
  • 日照网站建设seo优化/免费的网页设计成品下载
  • 县门户网站建设方案/滁州网站seo
  • 想做个网站报价蔬菜价格怎么做/魔方优化大师官网
  • 可不可以自己做网站/免费域名注册网站
  • 会展相关网站建设情况/国内手机搜索引擎十大排行
  • 做视频网站需要多少钱/互动营销的案例有哪些
  • OSPF综合实验报告册
  • 国产开源大模型崛起:使用Kimi K2/Qwen2/GLM-4.5搭建编程助手
  • HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例
  • 另外几种语言挑战100万行字符串文本排序
  • 借助 Wisdom SSH 的 AI 助手构建 Linux 开发环境
  • 多模通信·数据采集:AORO P9000U三防平板带来定制化解决方案