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

网站做百度推广有没有效果呼和浩特网站建设网络公司

网站做百度推广有没有效果,呼和浩特网站建设网络公司,网上怎么打广告,帮人做网站收费合法吗Spring 的 IoC和 DI 详解:从零开始理解与实践 一、IoC(控制反转) 1、什么是 IoC? IoC 是一种设计思想,它的核心是将对象的创建和管理权从开发者手中转移到外部容器(如 Spring 容器)。通过这种…

Spring 的 IoC和 DI 详解:从零开始理解与实践

一、IoC(控制反转)

1、什么是 IoC?

IoC 是一种设计思想,它的核心是将对象的创建和管理权从开发者手中转移到外部容器(如 Spring 容器)。通过这种方式,开发者不再需要手动创建对象和管理它们之间的依赖关系,而是将这些任务交给 Spring 容器来完成。

举个例子
在传统的开发中,如果你需要一个 BookService 来调用 BookDao 的方法,你可能会直接在 BookService 中通过 new BookDao() 创建 BookDao 的实例。这种方式虽然简单,但会导致代码的耦合度很高,难以维护和扩展。

而使用 IoC 后,BookDao 的实例会由 Spring 容器创建,并自动注入到 BookService 中。开发者只需关注业务逻辑,无需关心对象的创建和依赖关系。

2、 IoC 的实现原理

IoC 的实现基于 Spring 容器。Spring 容器负责创建对象、管理对象的生命周期以及对象之间的依赖关系。开发者通过配置文件(如 XML 文件)或注解的方式,将类交给 Spring 容器管理。

3、示例代码

3.1创建类

package dao;public interface BookDao {void save();
}package dao.impl;import dao.BookDao;public class BookDaoImpl implements BookDao {@Overridepublic void save() {System.out.println("BookDao save...");}
}package service;import dao.BookDao;public interface BookService {void save();
}package service.impl;import service.BookService;
import dao.BookDao;public class BookServiceImpl implements BookService {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}@Overridepublic void save() {System.out.println("BookService save...");bookDao.save();}
}

3.2 配置 Spring 容器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="bookService" class="service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"></property></bean><bean id="bookDao" class="dao.impl.BookDaoImpl"></bean>
</beans>

3.3 运行程序

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.BookService;public class Main {public static void main(String[] args) {// 创建 Spring 容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");// 从容器中获取 BookService 对象BookService bookService = (BookService) applicationContext.getBean("bookService");// 调用 save 方法bookService.save();}
}

4、运行效果

运行程序后,控制台会输出以下内容:

BookService save...
BookDao save...

运行效果讲解

  • Spring 容器会根据 applicationContext.xml 文件中的配置,创建 BookServiceImplBookDaoImpl 的实例。
  • BookDaoImpl 的实例由 Spring 容器创建并通过 setBookDao 方法注入到 BookServiceImpl 中。

二、DI(依赖注入)

1、什么是 DI?

DI 是 IoC 的一种实现方式,通过外部注入依赖对象,而不是在类内部创建依赖对象。这种方式使得依赖关系更加清晰,便于维护和测试。

2、DI 的实现方式

DI 的实现方式主要有以下几种:

构造函数注入:通过构造函数传递依赖对象。
Setter 注入:通过 Setter 方法注入依赖对象。
字段注入:直接在字段上注入依赖对象(需要使用注解)。

3、示例代码

3.1 使用 Setter 注入

package service.impl;import dao.BookDao;public class BookServiceImpl implements BookService {private BookDao bookDao;// 通过 Setter 方法注入依赖public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}@Overridepublic void save() {System.out.println("BookService save...");bookDao.save();}
}

3.2 配置 Spring 容器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="bookService" class="service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"></property></bean><bean id="bookDao" class="dao.impl.BookDaoImpl"></bean>
</beans>

3.3 运行程序

运行方式与 IoC 示例相同,代码如下:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.BookService;public class Main {public static void main(String[] args) {// 创建 Spring 容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");// 从容器中获取 BookService 对象BookService bookService = (BookService) applicationContext.getBean("bookService");// 调用 save 方法bookService.save();}
}

4 运行效果

运行程序后,控制台会输出以下内容:

BookService save...
BookDao save...

运行效果讲解

  • BookDaoImpl 的实例由 Spring 容器创建并通过 setBookDao 方法注入到 BookServiceImpl 中。
  • 依赖关系由容器管理,BookServiceImpl 不再直接依赖 BookDaoImpl 的具体实现。

三、Bean 的类型

1、Bean 的基础类型

1.1 name

可以设置别名,相当于 id 的作用,可以设置多个,后面的 ref 也可以引用 name 中的名字。

<bean id="bookdao" name="dao book se" class="dao.impl.BookDaoImpl"/>

1.2 scope

单例和非单例的设置,具体表现在重新创建时是否会刷新一个新的地址(默认为单例)。

<bean id="bookService" class="service.impl.BookServiceImpl" scope="prototype"/>

2、Bean 的实例化

2.1、构造方法实例化

通过反射的原理(直接通过class类进行)直接进行访问构造函数,无论是公共还是私有都能强制进行访问,不能设置实参,会报错

注:没有任何改变,系统自带就有,但不能添加一个有实参的构造,这样系统不会自动生成会报错

2.2、静态方法实例化

factory是一个中转站,通过改变xml中的获取方式类获取到factory中的new方法,本质还是在获取new中的对象

public static bookdao getOrderDao(){return new bookdaoimpl();
}
方式二:静态方法实例化<bean id="bookfactory" class="factory.factory1" factory-method="getOrderDao"></bean>

factory-method用于获取类中的这个方法

2.3、动态工厂

在这里插入图片描述

方法三:动态方法实例化
<bean id="bookfactory" class="factory.factory2"></bean>
<bean id="dao" factory-method="getOrderDao" factory-bean="bookfactory"></bean>

第一步先实例化对象,也就是第二行代码

第二部调用实例化的对象, factory-bean获取第一部的id名

2.4、factorybean

通过接口来实例化一些方法,减少xml中的操作

public class factory3 implements FactoryBean<bookdao>{@Overridepublic boolean isSingleton() {return  true;}@Overridepublic bookdao getObject() throws Exception {return new bookdaoimpl();}@Overridepublic Class<?> getObjectType() {return bookdao.class;}
}

isSingleton()设置是否单例

getObject() 获取返回对象

Type设置继承类型

方法四:factoryBean实例化
<bean id="factoryBean" class="factory.factory3"></bean>

3、Bean 的生命周期(两种方法)

3.1、直接创建

public void service(){System.out.println("book dao save.......");
}
public void init(){System.out.println("init");
}
public void destory(){System.out.println("destory");
}

需要在xml中加参数

<bean id="bookdao" name="dao book se" class="dao.impl.bookdaoimpl" init-method="init" destroy-method="destory"/>

init-method="init"设置初始化

destroy-method="destory"设置销毁

销毁的执行需要程序中进行close关闭后才能运行

ClassPathXmlApplicationContext cts = new ClassPathXmlApplicationContext("application.xml");
bookdao bookdao = (bookdao)cts.getBean("bookdao");
bookdao.service();
cts.close();

更改了ApplicationContext为ClassPathXmlApplicationContext

增加了cts.close();

3.2、接口创建实现

public class bookdaoimpl implements dao.bookdao, InitializingBean, DisposableBean {public void service(){System.out.println("book dao save.......");}@Overridepublic void destroy() throws Exception {System.out.println("destory.........");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("init........");}
}

实现了

InitializingBean, DisposableBean 两个接口

四、注入类型

1、Setter 注入

1.1 引用类型

通过 Setter 方法注入引用类型

public class BookServiceImpl {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
<bean id="bookService" class="service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"></property>
</bean>

ref用于设置这里的名字,name跟类中的名字相同

1.2 简单类型

通过 Setter 方法注入简单类型。

public class BookDaoImpl {private String databaseName;private int connectionNum;public void setDatabaseName(String databaseName) {this.databaseName = databaseName;}public void setConnectionNum(int connectionNum) {this.connectionNum = connectionNum;}
}
<bean id="bookDao" class="dao.impl.BookDaoImpl"><property name="databaseName" value="mysql"></property><property name="connectionNum" value="666"></property>
</bean>

value设置里面的值,没有顺序之分

2、构造器注入

2.1 引用类型

通过构造函数注入引用类型。

public class BookServiceImpl {private BookDao bookDao;public BookServiceImpl(BookDao bookDao) {this.bookDao = bookDao;}
}
<bean id="bookService" class="service.impl.BookServiceImpl"><constructor-arg name="bookDao" ref="bookDao"></constructor-arg>
</bean>

2.2 简单类型

通过构造函数注入简单类型。

public class BookDaoImpl {private String databaseName;private int connectionNum;public BookDaoImpl(String databaseName, int connectionNum) {this.databaseName = databaseName;this.connectionNum = connectionNum;}
}
<bean id="bookDao" class="dao.impl.BookDaoImpl"><constructor-arg name="databaseName" value="mysql"></constructor-arg><constructor-arg name="connectionNum" value="666"></constructor-arg>
</bean>

2.3命名的其他操作

name的命名可能耦合度过高

1、采取type=“” 类型来进行确定

2、采取index=""位置来进行确定

在这里插入图片描述

3、自动注入

在xml中进行配置直接进行注入

<bean class="com.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>

autowire一般情况使用bytype按类型

当有两个名字的情况进行按名字,名字取决于dao中的private类型

注意:setter类型不能够忘记,不然会报错
在这里插入图片描述

4、集合注入

通过 XML 配置注入集合类型。

public class BookDaoImpl {private int[] array;private List<String> list;private Set<String> set;private Map<String, String> map;private Properties properties;// Getter 和 Setter 方法
}
<bean id="bookDao" class="dao.impl.BookDaoImpl"><property name="array"><array><value>100</value><value>200</value><value>300</value></array></property><property name="list"><list><value>itcast</value><value>itheima</value></list></property><property name="set"><set><value>itcast</value><value>itheima</value></set></property><property name="map"><map><entry key="country" value="china"/><entry key="province" value="henan"/></map></property><property name="properties"><props><prop key="country">china</prop><prop key="province">henan</prop></props></property>
</bean>

五、总结

IoC 和 DI 是 Spring 框架的核心概念,它们的主要作用是降低代码的耦合度,提高代码的灵活性和可维护性。

  • IoC:通过将对象的创建和管理交给 Spring 容器,开发者只需关注业务逻辑。
  • DI:通过依赖注入的方式,使得依赖关系更加清晰,便于维护和测试。

在实际开发中,合理使用 IoC 和 DI 能够显著提高代码的质量和可维护性。希望这篇博客能够帮助你更好地理解和应用 Spring 的 IoC 和 DI!

http://www.dtcms.com/wzjs/538430.html

相关文章:

  • 企业网站建设与推广范文深圳宝安区房价多少钱一平方
  • 网站空间费网站开发实例教程
  • 成立一个网站需要多少钱企业网站优化平台
  • 学做美食视频网站网页设计考试题目
  • 咨询行业网站制作wordpress用户注册邮件
  • 个人可以做企业网站河南制作网站
  • 免费linux网站空间上海市企业
  • 宜宾网站建设北斗网络衣服定制的app有哪些
  • 怎么做网站中英文版本哪个网站可以免费做H5
  • 合法购物网站建设学校网站怎么建设视频
  • 做旅游网站多少钱免费网站开发公司
  • 高端大气上档次的网站wordpress收录提高百度
  • 医院网站模板 html导航网站移动端流量占比
  • 做jsp网站用哪些软件下载wordpress网站插件下载
  • 网站开发需要什么配置的电脑新手网站建设模板下载
  • 哈尔滨建设部网站中国卫生人才网官网
  • 十大创意网站大理市建设局网站
  • 网站icp备案费用如何注册百度账号
  • zencart网站地图生成哪个网站建设服务器是在国外的
  • 织梦网站怎么建设百度站长平台诊断
  • 勾线外包网站wordpress域名修改后
  • 石家庄市住房建设局网站网站建设主要研究内容
  • 开网店需要自己做网站吗wordpress禁用导航栏代码
  • 帮客户做网站的公司seo计费
  • 公司网站总感觉少点什么找什么人做wordpress上传apk
  • 帮你做海报网站html语言的特点
  • 河南无限动力做网站怎么样重庆市建立网站的网络公司
  • 十堰网站建设价格政务公开与网站建设
  • 临沂搜索引擎网站推广dz门户 WordPress
  • 初中作文网成都网站seo排名优化