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

中山金舜家庭用品有限公司怎样网站地图休闲农庄展示网站

中山金舜家庭用品有限公司怎样网站地图,休闲农庄展示网站,新冠咳嗽吃什么药,大型网站怎样做优化PHP目录 一.什么是IoC a.定义 b.理解控制反转 二.bean的引入 a.bean的存储 b.可以实现bean的存储的相关注解 三.介绍相关注解的用法 a.Controller注解的用法 使⽤ Controller 存储 bean 的代码如下所⽰: 从Spring容器中获取对象代码如下: 运行结…

目录

一.什么是IoC

a.定义

b.理解控制反转

二.bean的引入 

a.bean的存储

b.可以实现bean的存储的相关注解

三.介绍相关注解的用法

a.@Controller注解的用法

使⽤ @Controller 存储 bean 的代码如下所⽰:

从Spring容器中获取对象代码如下:

 运行结果

删除@Controller注解

获取bean对象的其他方式

Bean的命名约定

b.关于类注解的总结

类注解与分层的关系

查看注解的源码

c.方法注解@Bean

为什么需要@Bean

@Bean的使用

删掉@Servicee注解 

@Bean定义多个对象

正确调用方式

@Bean的重命名

 @ComponentScan更改扫描路径

造成这样的原因 


一.什么是IoC

a.定义

  • IoC 即 Inversion of Control(控制反转),Spring 是 “控制反转” 的容器,也叫 IoC 容器 ,有时也被称为 Spring 容器。
  • 控制反转指控制权反转,具体是获得依赖对象的过程被反转。传统开发需自己 new 创建对象,现在不需要再进行创建,把创建对象的任务交给容器,程序中只需要依赖注入(Dependency Injection ,简称DI)就可以了。这个容器称为:IOC容器。Spring是一个IOC容器。

b.理解控制反转

控制反转的例子在生活中非常常见。

例子如下:

  • 招聘:企业员工招聘、入职、解雇等控制权,由老板转交给 HR(人力资源)处理 。
  • 自动驾驶:传统驾驶车辆的横向和纵向驾驶控制权由驾驶员控制,自动驾驶交给驾驶自动化系统。

二.bean的引入 

a.bean的存储

前面提到 IoC 控制反转,是将对象的控制权交给 Spring 的 IoC 容器,由其创建及管理对象,也就是 bean 的存储。如果要把某个对象交给IoC容器管理,需要再类上添加注解。Spring框架为了更好的服务Web应用程序,提供了丰富的注解.

b.可以实现bean的存储的相关注解

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

  1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration
  2. 方法注解:@Bean

三.介绍相关注解的用法

a.@Controller注解的用法

使⽤ @Controller 存储 bean 的代码如下所⽰:

package com.example.demo.SpringIoC.controller;import org.springframework.stereotype.Controller;@Controller
public class UserController {public void say(){System.out.println("this is Controller");}
}

从Spring容器中获取对象代码如下:

package com.example.demo.SpringIoC;import com.example.demo.SpringIoC.controller.UserController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {//获取Spring上下文对象ApplicationContext context=SpringApplication.run(DemoApplication.class, args);//从Spring上下文中获取对象UserController userController= (UserController) context.getBean("userController");userController.say();}}
  • ApplicationContext 翻译为Spring 上下文
  • 因为对象都交给 Spring 管理了,所以获取对象需从 Spring 取,就要先得到 Spring 上下文 

 运行结果

上述的结果确实可以说明@Controller是将UserController的控制权交给了Spring的IoC容器。

删除@Controller注解

删除@Controller注解程序就会报错,这里的异常是说Spring的IoC容器里面没有名字是userController这样的对象。需要注意的是,获取bean对象的方式不同,造成异常的原因也会不同,虽然都是NoSuchBeanDefinitionException。

获取bean对象的其他方式

演示一下,第二种方式吧。

跟第一种方式差不多,唯一的区别就是图中已经标注。

如果我们此时再次删掉@Controller注解,会发生什么呢 

仔细观察注解,异常原因变了,这次的异常原因是Spring的IoC容器里面没有类型是userController对象了。

Bean的命名约定

详情请参见官方文档:Bean Overview :: Spring Framework

我简单说说需要主要的地方

如果类名是:UserController(大驼峰),则Bean为:userController(小驼峰)

如果类型是:USerController(前两个字母是大写,则Bean名称不变),则Bean为:USerController

b.关于类注解的总结

上述的类注解:@Controller、@Service、@Repository、@Component、@Configuration其实并无太大差别,所以我只展示了@Controller的用法。在用途上不做什么区分吧。只要结果没问题,想怎么用就怎么用。但是如果非要说区别,也是有区别的。

类注解与分层的关系

@Controller控制层,接收请求,对请求进行处理,并进行响应
@Service业务逻辑层,处理具体的业务逻辑
@Repository数据访问层,也称为持久层,负责数据访问操作
@Configuration配置层,处理项目中的一些配置信息
@Component组件层

虽然说在实际过程中,这5个注解的边界,没有那么清晰,但是控制层必须使用@Controller

查看注解的源码

可以得知Component衍生了其他的4个注解。

c.方法注解@Bean

为什么需要@Bean

类注解是添加到某个类上的,但是存在两个问题:

  1. 使用外部包里的类,没办法添加类注解
  2. 一个类,需要多个对象,比如多个数据源

这种场景,我们就需要使用方法注解 @Bean

@Bean的使用

代码如下

package com.example.demo.SpringIoC.controller;import com.example.demo.SpringIoC.model.User;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;@Service
public class UserController {@Beanpublic User user(){User user=new User();user.setName("Maybe");user.setAge(15);return user;}
}
package com.example.demo.SpringIoC.model;import lombok.Data;@Data
public class User {private String name;private int age;
}
package com.example.demo.SpringIoC;import com.example.demo.SpringIoC.controller.UserController;
import com.example.demo.SpringIoC.model.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {//获取Spring上下文对象ApplicationContext context=SpringApplication.run(DemoApplication.class, args);//从Spring上下文中获取对象User user=context.getBean(User.class);System.out.println(user);}}

运行结果

删掉@Servicee注解 

则可以退出结论,@Bean不可以单独使用,必须与类注解一起使用。 

@Bean定义多个对象

代码如下

运行结果

 异常原因是存在两个类型都是User的,Spring分不清。

正确调用方式

运行结果

则推出结论: @Bean注解的bean,bean的名称就是它的方法名.

@Bean的重命名

代码如下

运行结果 

注意:name=可以省略;u1和u2都是指代的user1;如果只有一个的话,{}也可以省略; 

 @ComponentScan更改扫描路径

使用五大类注解声明的bean,一定会生效吗?不一定,因为要想生效,还需要配置扫描路径,让Spring扫描到这些注解。也就是通过@ComponentScan来配置扫描路径

原本的结构

修改结构

运行结果

造成这样的原因 

因为spring的默认扫描路径修改前如下

修改后如下 

则修改后,spring无法扫描到UserController类了。

这就需要@ComponentScan的扫描路径来更改扫描路径即可

 

运行结果

        

http://www.dtcms.com/a/472124.html

相关文章:

  • 北京建设监理协会官方网站山东嘉祥做网站的有哪几家
  • 百度站长工具抓取诊断企业网络推广平台公司
  • 网站建设详细需求文档网站什么做的
  • 学校资源网站建设目标未被列入失信被执行人名单查询
  • 做网站后台维护的岗位叫什么全网浏览器
  • 开通招聘网站如何做分录长沙互联网公司在哪个区
  • 做企业网站类型wordpress 默认文本编辑器
  • 怎么建设像天猫的网站小程序商城哪的服务好
  • Web 开发 28
  • 遵义仁怀网站建设做暧在线观看网站
  • 灰色的网站网站不备案能解析吗
  • 帮做网站设计与规划作业网站降权了怎么办
  • 常州网站制作工具杭州seo的优化
  • 网站建设在哪里找人软文什么意思
  • 衡阳县建设局网站网站设计制作的服务和质量
  • 专门做网站的公司与外包公司有哪些wordpress php版本要求
  • 国外免费网站域名服务器做推广的网站
  • 国家工商局网站官网营业执照年审怎么年审
  • 02-数据类型与基本语法-教程
  • 南京英文网站建设好习惯网站
  • 去迪拜网站做乞丐修改网站j广州网络公司
  • 做医疗网站颜色选择售后管理系统软件
  • 湘潭做网站推荐磐石网络最新新闻热点事件看法
  • 拥有域名后怎么建设网站wordpress百度主动插件
  • 未来中森网站建设价格北京网站建设求职简历
  • 聊城网站制作需要多少钱加网络网站建设工作室
  • 打开网站后直接做跳转页面吗信息流优化师工作总结
  • 粮食网站建设的背景及意义静态网站结构如何更新
  • 礼品网站建设深圳市创想三维科技有限公司
  • 网站样板手机响应式网站怎么做