bean

Springboot启动扫描包的原理

廉价感情. 提交于 2020-03-17 22:58:41
某厂面试归来,发现自己落伍了!>>> 参考链接1 参考链接2 所参照代码为Springboot2.1.1 ​ 默认情况下,扫描范围是主类xxxApplication所在包及其子目录,可以在后面的具体实现中看到。 ​ 从主类中的 SpringApplication.run(xxxApplication.class, args); 一直点击进入run方法的实现,这里可以看到run方法里有几个关于context的方法分别是: createApplicationContext() prepareContext(xxx,xx) refreshContext(context) public ConfigurableApplicationContext run ( String . . . args ) { . . . try { . . . context = createApplicationContext ( ) ; . . . prepareContext ( context , environment , listeners , applicationArguments , printedBanner ) ; refreshContext ( context ) ; . . . . catch ( Throwable ex ) { } 逐个分析: 1

课时2:Spring整合MyBatis的几种方式 前面一个课时已经讲了一种思路了

匆匆过客 提交于 2020-03-17 19:19:30
.1)第二种方式 :就是省略掉第一种方式的实现类   1. 在在第一种方式的基础上改造     1.2 dao的实现类可以删除了     1.3 改造spring配置文件 <bean id="studentDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="net.bdqn.hbz.dao.IStudentMapper"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>     mapperInterface代表你要给哪个接口创建代理 sqlSessionFactory代表告知数据库配置信息 就是第一种方式注入的sqlSessionFactory .2)第三种方式:简化第二种方式 (也就是简化每创建一个接口都要写一次配置) 批量产生   1.在第二个基础上改造     1.1 改造spring配置文件 <bean id="mappers" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入SqlSessionFactory--> <property name=

关于Spring中Bean作用域

孤街醉人 提交于 2020-03-17 14:41:47
某厂面试归来,发现自己落伍了!>>> 关于Spring中Bean作用域scope属性常见有两个属性值: singleton(单例) 和 prototype (原型/多例)。在SpringMVC中默认是 singleton(单例),那问题来了:为啥 SpringMVC默认 是单例呢? 我们知道 SpringMVC的控制层是方法级别:每次请求都执行对应的方法 @RestController //第二次修改为多例 //@Scope("prototype") public class TestController { private int i = 0; @GetMapping(value = "/test1") public int testInstance1(){ i++; return i; } @GetMapping(value = "/test2") public int testInstance2(){ i++; return i; } } 第一次单例模式 依次访问 http://localhost:8082/reed/test1 //返回1 http://localhost:8082/reed/test1 //返回2 http://localhost:8082/reed/test2 //返回3 可以看出。所以请求共享一个对象 /////////////////////////

二、通过工厂方法来配置bean

三世轮回 提交于 2020-03-17 14:25:09
调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg> 元素为该方法传递方法参数. 实例工厂方法: 将对象的创建过程封装到另外一个对象实例的方法里. 当客户端需要请求对象时, 只需要简单的调用该实例方法而不需要关心对象的创建细节. 要声明通过实例工厂方法创建的 Bean 在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean 在 factory-method 属性里指定该工厂方法的名称 使用 construtor-arg 元素为工厂方法传递方法参数 <?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

Spring MVC上传和下载

爷,独闯天下 提交于 2020-03-17 09:03:01
某厂面试归来,发现自己落伍了!>>> 一、简介: Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等 优点:它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所没有的优势。而且框架本身有代码,看起来容易理解。 二、SpringMVC几个核心类: 控制器核心类:org.springframework.web.servlet.DispatcherServlet - 配置web.xml 加载配置文件核心类:org.springframework.web.context.ContextLoaderListener – spring的配置文件 处理url影射核心类:org.springframework.web.servlet.handler

使用Spring进行面向切面编程(AOP)

女生的网名这么多〃 提交于 2020-03-17 08:36:43
本文转载自: 使用Spring进行面向切面编程(AOP) 前言 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。 (这些关注点术语通常称作 横切(crosscutting) 关注点。) Spring的一个关键的组件就是 AOP框架。 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更加完善。 Spring 2.0 AOP Spring 2.0 引入了一种更加简单并且更强大的方式来自定义切面,用户可以选择使用基于模式(schema-based)的方式或者使用@AspectJ注解。 这两种风格都完全支持通知(Advice)类型和AspectJ的切入点语言,虽然实际上仍然使用Spring AOP进行织入(Weaving)。 本章主要讨论Spring 2.0对基于模式和基于@AspectJ的AOP支持。请查阅"AOP声明风格的选择"一节获取 为你的应用选择适当的声明风格的建议。Spring 2.0完全保留了对Spring 1.2的向下兼容性,下一章 将讨论 Spring 1.2 API所提供的底层的AOP支持。

Memcached理解笔2---XMemcached&Spring集成

﹥>﹥吖頭↗ 提交于 2020-03-17 08:35:01
一、Memcached Client简要介绍 Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种Client一直存在各种争议: Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛; SpyMemcached 比 Memcached Client for Java更高效; XMemcached 比 SpyMemcache并发效果更好。 用数据来说话,参考官方性能对比: Memcached Client for Java: https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE XMemcached: http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html 二、XMemcached特性 XMemcached特性: 高性能 支持完整的memcached文本协议,二进制协议。 支持JMX,可以通过MBean调整性能参数、动态添加/移除server、查看统计等。 支持客户端统计 支持memcached节点的动态增减。 支持memcached分布:余数分布和一致性哈希分布。

笔记:spring简介

六月ゝ 毕业季﹏ 提交于 2020-03-17 07:09:21
1.spring框架的核心功能有两个: spring容器作为超级大工厂,负责创建,管理所有的java对象,这些java对象被称为Bean。 spring容器管理容器bean之间的依赖关系,spring使用一种被称为“依赖注入”的方式来管理bean之间的依赖关系。 2.理解依赖注入: 以配置文件来管理java实例的协作关系,称之为 控制反转 (Inverse of control,IoC)。 后来起了个新名字: 依赖注入 (Dependency Injection)。 3.当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法: 1.原始做法:new一个对象, 主动创建 被依赖对象,然后调用其方法; 2.简单工厂模式:找到被依赖对象的工厂, 主动通过 工厂去调用被依赖对象。 主动 二字,这必然会导致调用者与被依赖对象实现类的硬编码耦合,非常不利于项目升级的维护。 4.spring框架 中: 调用者无需主动获取被调用对象,只需被动接收spring容器为调用者的成员变量赋值即可。 5.spring的零配置支持 spring提供如下几个Annotation来标注bean: @Component:标注一个普通spring bean类; @Controller:标注一个控制器类组件; @Service:标注一个业务逻辑组件类;

Sping实战之通过JAVA代码装配Bean

…衆ロ難τιáo~ 提交于 2020-03-17 07:00:23
  尽管在很多场景下通过组件扫描和自动装配实现Spring的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置Spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,因此就不能使用自动化装配的方案了。   在这种情况下,你必须要采用显式装配的方式。在进行显式配置的时候,有两种可选方案:Java和XML。在这节中,我们将会学习如何使用Java配置,接下来的一节中将会继续学习Spring的XML配置   就像我之前所说的,在进行显式配置时,JavaConfig是更好的方案,因为它更为强大、类型安全并且对重构友好。因为它就是Java代码,就像应用程序中的其他Java代码一样。同时,JavaConfig与其他的Java代码又有所区别,在概念上,它与应用程序中的业务逻辑和领域代码是不同的。尽管它与其他的组件一样都使用相同的语言进行表述,但JavaConfig是配置代码。这意味着它不应该包含任何业务逻辑,JavaConfig也不应该侵入到业务逻辑代码之中。尽管不是必须的,但通常会将JavaConfig放到单独的包中,使它与其他的应用程序逻辑分离开来,这样对于它的意图就不会产生困惑了    1.1借助JavaConfig实现注入 我们需要声明CDPlayerbean

swoft(v2.0.8)之Bean容器踩坑

末鹿安然 提交于 2020-03-17 05:27:34
Bean容器代码 <?php namespace App \ Bean ; use Swoft \ Bean \ Annotation \ Mapping \ Bean ; /** *@Bean(name="User", scope=Bean::SINGLETON , alias="u") */ class User { private $name ; private $age ; public function setName ( $name ) { $this - > name = $name ; } public function getName ( ) { return $this - > name ; } public function setAge ( $age ) { $this - > age = $age ; } public function getAge ( ) { return $this - > age ; } public function toArray ( ) { $data = [ " name" = > $this - > name , "age" = > $this - > age ] ; return $data ; } } 控制器调用 <?php namespace App \ Http \ Controller ; use App \