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

装修公司的网站可以在自己的电脑上做网站吗

装修公司的网站,可以在自己的电脑上做网站吗,互联网保险的运营模式,医美三方网站怎么做目录 1.什么是IoC 2.IoC应用场景(案例分析) 2.1传统程序开发 2.2问题分析 2.3解决方案 2.4IoC 优势 3. DI概念 4.IoC详解 4.1Bean的存储 4.2Controller(控制器存储) 4.3获取Bean 4.4Bean相关注解 1.什么是IoC Spring…

目录

1.什么是IoC

2.IoC应用场景(案例分析) 

2.1传统程序开发

2.2问题分析

2.3解决方案

2.4IoC 优势

3. DI概念

4.IoC详解

4.1Bean的存储

 4.2@Controller(控制器存储)

4.3获取Bean

4.4Bean相关注解


1.什么是IoC

Spring是⼀个开源框架, 他让我们的开发更加简单、Spring 是包含了众多工具⽅法的 IoC 容器 、

IoC(Inversion of Control,控制反转)是Spring的核心思想,在传统的编程模式中,对象的创建和依赖关系的管理通常由程序自身来完成。而在使用了 IoC 思想的框架(如 Spring)中,这些对象的创建以及对象之间依赖关系的建立等控制权由框架来接管,而不是由应用程序代码直接控制

所谓的IOC称之为控制反转,简单来说就是将对象的创建的权力及对象生命周期的管理过程交由Spring框架来处理,从此在开发过程中不在需要关注对象的创建和生命周期的管理,而是在需要的时候由Spring框架提供,这个由Spring框架管理对象创建和生命周期的机制称之为控制反转。

2.IoC应用场景(案例分析) 

2.1传统程序开发

需求:造出一辆能跑的车

先设计轮⼦(Tire) ,然后根据轮⼦的⼤⼩设计底盘(Bottom) ,接着根据底盘设计⻋⾝(Framework) ,最后根据⻋⾝设计好整个汽⻋(Car)

这⾥就出现了⼀个"依赖"关系:汽车依赖车身,车身依赖底盘 ,底盘依赖轮⼦ .

 最终程序的实现代码如下:

public class Car {private Framework framework;public Car() {framework = new Framework();System.out.println("car init...");}public void run() {System.out.println("car run...");}
}public class Framework {private Bottom bottom;public Framework() {bottom = new Bottom();System.out.println("framework init....");}
}public class Bottom {private Tire tire;public Bottom() {tire = new Tire();System.out.println("bottom init...");}
}public class Tire {public Tire() {System.out.println("tire init...size:"+size);}
}

2.2问题分析

这样的设计看起来没问题 ,但是可维护性却很低.接下来需求变更,我们需要加工多种尺寸的轮胎.

那这个时候就要对上⾯的程序进⾏修改了 ,修改后的代码如下所示:

修改之后, 其他调⽤程序也会报错, 们需要继续修改

 

从以上代码可以看出以上程序的问题是: 程序的耦合度⾮常⾼,当最底层代码改动之后 ,整个调用链上的所有代码都需要修改.

2.3解决方案

我们尝试换⼀种思路, 我们先设计汽车的⼤概样子 ,然后根据汽车的样子来设计车身,根据车身来设计 底盘 ,最后根据底盘来设计轮子 . 这时候 ,依赖关系就倒置过来了:轮⼦依赖底盘  底盘依赖车身,车身依赖汽车

此时 ,我们只需要将原来由⾃⼰创建的下级类 ,改为传递的⽅式(也就是注入的⽅式), 因为我们不需要在当前类中创建下级类了 ,所以下级类即使发⽣变化(创建或减少参数), 当前类本⾝也⽆需修改任何代码 ,这样就完成了程序的解耦. 

public class Car {private Framework framework;public Car(Framework framework) {this.framework = framework;System.out.println("car init...");}public void run(){System.out.println("car run...");}
}
public class Framework {private Bottom bottom;public Framework(Bottom bottom) {this.bottom = bottom;System.out.println("framework init....");}
}
public class Bottom {private Tire tire;public Bottom(Tire tire) {this.tire = tire;System.out.println("bottom init....");}
}
public class Tire {private int size;public Tire(int size) {this.size = size;this.color= color;System.out.println("tire init...size:"+size);}
}

代码经过以上调整 ,⽆论底层类如何变化 ,整个调⽤链是不⽤做任何改变的 ,这样就完成了代码之间的解耦 ,从而实现了更加灵活、通⽤的程序设计了。

2.4IoC 优势

在传统的代码中对象创建顺序是:Car -> Framework -> Bottom -> Tire

改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car

通⽤程序的实现代码 ,类的创建顺序是反的 ,传统代码是 Car 控制并创建了Framework Framework 创建并创建了 Bottom ,依次往下 ,⽽改进之后的控制权发⽣的反转 ,不是使⽤⽅对象创建并控制依赖对象了是把依赖对象注⼊将当前对象中,依赖对象的控制权不再由当前类控制

这样的话, 即使依赖类发⽣任何改变  前类都是不受影响的 ,这就是典型的控制反转 ,也就是 IoC 实现思想。

IoC 的优点主要包括以下几点:

  1. 降低耦合度:使组件之间的依赖关系更加松散,便于系统的扩展和维护。
  2. 提高代码复用性:组件可以更方便地在不同场景中复用。
  3. 增强灵活性:可以更轻松地替换或修改依赖的对象,而不影响其他部分代码。
  4. 便于测试:可以方便地模拟和替换依赖对象,进行单元测试。
  5. 提升开发效率:开发者无需花费大量时间处理对象创建和依赖管理的繁琐细节。
  6. 更好的架构管理:有助于构建更清晰、合理的系统架构。

3. DI概念

IoC 是一种设计思想,而 DI(Dependency Injection,依赖注入)是实现 IoC 的一种重要方式。

DI 具体指的是将对象之间的依赖关系,通过一定的方式(如构造器注入、Setter 方法注入、字段注入等)在运行时动态地注入到对象中。

可以说 DI 是 IoC 思想在具体技术实现层面的体现,它们紧密相关,共同作用来实现对象创建和依赖管理的解耦与灵活配置。

创建Student类:

public class Student {private String name;public Student(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

创建一个Course类,并通过注解注入Student对象:

@Service
public class Course {@Autowiredprivate Student student;public void showDetails() {System.out.println("依赖注入学生姓名:" + student.getName());}
}

4.IoC详解

通过上⾯的案例, 我们已经知道了Spring IoC DI的基本操作, 接下来我们来系统的学习Spring IoCDI 的操作.前⾯我们提到IoC控制反转 ,就是将对象的控制权交给SpringIOC容器  IOC容器创建及管理对象。也就是bean的存储.

4.1Bean的存储

要把某个对象交给IOC容器管理 ,需要在类上添加⼀个注解:@Component

Spring框架为了更好的服务web应⽤程序, 提供了更丰富的注解.

共有两类注解类型可以实现:

类注解:@Controller@Service@Repository@Component@Configuration.

⽅法注解:@Bean. 

 4.2@Controller(控制器存储)

使用@Controller 存储 bean 的代码如下所示:

 @Controller // 将对象存储到 Spring 中public class UserController {public void sayHi(){System.out.println("hi,UserController...");}}

如何观察这个对象已经存在Spring容器当中了呢? 接下来我们学习如何从Spring容器中获取对象

 @SpringBootApplicationpublic class SpringIocDemoApplication { public static void main(String[] args) { //获取Spring上下⽂对象
ApplicationContext context =  SpringApplication.run(TestSpringTwoApplication.class,args);//从Spring上下⽂中获取对象UserController userController = context.getBean(UserController.class);//使⽤对象userController.sayHello();}
}
}

观察运⾏结果, 发现成功从Spring中获取到Controller对象, 并执⾏ControllersayHello⽅法

如果把@Controller删掉, 再观察运⾏结果

 报错信息显⽰: 找不到类型是: com.example.demo.controller.UserControllerbean

获取bean对象的其他⽅式:

上述代码是根据类型来查找对象, 如果Spring容器中, 同⼀个类型存在多个bean的话, 怎么获取呢

ApplicationContext 也提供了其他获取bean的⽅式, ApplicationContext 获取bean对象的功能, 是父BeanFactory提供的功能.

     // 1. 根据bean名称获取beanObject getBean(String var1) throws BeansException;// 2. 根据bean名称和类型获取bean<T> T getBean(String var1, Class<T> var2) throws BeansException;// 3. 按bean名称和构造函数参数动态创建bean,只适⽤于具有原型(prototype)作⽤域的beanObject getBean(String var1, Object... var2) throws BeansException;// 4. 根据类型获取bean<T> T getBean(Class<T> var1) throws BeansException;// 5. 按bean类型和构造函数参数动态创建bean,只适⽤于具有原型(prototype)作⽤域的bea<T> T getBean(Class<T> var1, Object... var2) throws BeansException;

常⽤的是上述1,2,4, 这三种⽅式,取到的bean是⼀样的,其中1,2种都涉及到根据名称来获取对象. bean的名称是什么呢?

Spring beanSpring框架在运⾏时管理的对象, Spring会给管理的对象起⼀个名字. ⽐如学校管理学⽣ , 会给每个学⽣分配⼀个学号, 根据学号, 就可以找到对应的学⽣ .

Spring也是如此, 给每个对象起⼀个名字, Bean的名称(BeanId)就可以获取到对应的对象.

4.3获取Bean

 @SpringBootApplicationpublic class SpringIocDemoApplication { public static void main(String[] args) { //获取Spring上下⽂对象ApplicationContext context = SpringApplication.run(SpringIocDemoApplication.class,args); //从Spring上下⽂中获取对象//根据bean类型, 从Spring上下⽂中获取对象UserController userController1 = context.getBean(UserController.class); //根据bean名称, 从Spring上下⽂中获取对象UserController userController2 = (UserController) context.getBean("userController"); //根据bean类型+名称, 从Spring上下⽂中获取对象UserController userController3 = context.getBean("userController",UserController.class);System.out.println(userController1);System.out.println(userController2);System.out.println(userController3);

运⾏结果:

地址⼀样, 说明是同一个对象

继承关系和功能⽅⾯来说:

Spring 容器有两个顶级的接⼝ BeanFactory ApplicationContext。

其中 BeanFactory 提供了基础的访问容器的能力,

ApplicationContext 属于 BeanFactory 的⼦类 ,它除了继承了 BeanFactory 的所有功能之外, 它还拥有独特的特性 ,还添加了对国际化⽀持、资源访问⽀持、 以及事件传播等⽅⾯的⽀持

从性能⽅⾯来说:ApplicationContext ⼀次性加载并初始化所有的 Bean 对象 ,⽽ BeanFactory 是需要那个才去加载那个 ,因此更加轻量. (空间换时间)

4.4Bean相关注解

在 Spring 中,有一些与 Bean 相关的重要注解,比如:

@Component:这是一个通用的组件注解,用于将类标识为可被 Spring 容器管理的 Bean。

@Service:通常用于标识服务层的 Bean,业务逻辑层, 处理具体的业务逻辑.

@Repository:一般用于标识数据访问层(如数据库操作相关)的 Bean。

@Controller:控制层, 接收请求, 对请求进⾏处理, 并进⾏响应.

@Configuration :配置层. 处理项⽬中的⼀些配置信.

此外,还有@AutoWired用于自动注入依赖等注解,它们共同协作来实现对 Bean 的管理和配置

程序员看到类注解之后 ,就能直接了解当前类的用途.

http://www.yayakq.cn/news/736895/

相关文章:

  • 定制产品网站建筑网络工程教程
  • 营销型网站页面摸板html电子商务网站模板下载
  • 网站制作外包价格菏泽郓城住房和城乡建设局网站
  • 建设企业网站找谁淘宝券商城网站制作
  • 什么叫静态网站服务器搭建要多少钱
  • 你们需要网站建设装修案例图片 效果图
  • 协会网站改版建议网站流量统计数据库设计
  • 网站开发工作量及预算计算用dw做淘客网站的步骤
  • 网站用Access做数据库简单的网站设计模板下载
  • 济南专业做网站公司定制wordpress
  • 青岛网站营销推广上海建筑安全协会网站
  • 如何布局网站找事情做的网站
  • 资深网站做电影采集网站用什么vps
  • 中和阗盛工程建设有限公司网站asp.net 网站开发框架
  • 百度站长怎么做网站维护站库设计网站官网
  • 凡科建站的网址请大学生做网站
  • 唐山网站开发培训长沙棋牌软件开发公司
  • 青岛做网站建设哪家好竞价托管外包
  • 做公司简介的开源网站全国文明城市创建方案
  • 刚做网站和搜出来的不一样响应式外贸建站
  • 招聘 负责网站开发中国企业网银
  • 网站建设比较好公司wordpress分类归档
  • 永川区网站建设咨询西安公司官网制作
  • 连衣裙一起做网站高端 网站设计公司
  • 金华网站建设方案开发用dw做淘客网站的步骤
  • 网站建设属于全国黄页大全
  • php建站模板商城入口
  • 科技部做财务决算的网站是什么网站购买云空间
  • 室内设计公司排名国外seo诊断服务
  • 企业网站事例网站域名查询工具