bean

Spring常用注解

浪子不回头ぞ 提交于 2020-03-04 06:46:57
@Configuration :告诉Spring这是一个配置类,配置类===配置文件 @Bean :给容器注入一个bean,类型为返回值类型,id默认是用方法名作为id @Configuration //@ComponentScan value:指定要扫描的包 //excludeFilters=Filter[]:指定扫描的时候按照什么规则排除哪些组件 //includeFilters=Filter[]:指定扫描的时候只需要包含哪些组件,需要使这个起作用,还需要配置useDefaultFilters=false,禁用掉默认规则(扫描所有) /*@ComponentScan(value="com.atguigu.controller",includeFilters={@Filter(type=FilterType.ANNOTATION,classes=Controller.class)},useDefaultFilters=false)*/ @ComponentScan(value="com.atguigu.controller",excludeFilters={@Filter(type=FilterType.ANNOTATION,classes=Controller.class)}) public class MainConfig{ @Scope("prototype") @Bean

hibernate入门---Hibernate查询方式(for循环、构造器、对象数组等)【第三天,相当于总结整合】

柔情痞子 提交于 2020-03-04 04:30:55
Hibernate查询方式【内连接和外连接不在此篇】 本文讲述的是HQL以及各种情况输出对象的for循环以及构造器的例子,当然这是Hibernate结合一起完成的任务。技术上,离开一些方法,不掌握一些基本的方法,灵活使用,是会带来诸多不便的。 查询方式都在例子里的方法里,我把全部都写在了一个类里,基本思路: 类:Customer->CustomerManager->Demo 配置文件:hibernate.cfg.xml->Customer.hbm.xml 关系: (我们不去考虑什么session啊之类的内部机制,单纯的从自己写的类和配置文件来进行初步理解,深入机制前面已有/也可查阅资料了解更多) 下面直接贴例子,自行体会(因为之前的文章基本总结过了,当然这个例子还是能够看出一些思想的): 一、配置文件:(你没有看错,还是那个hibernate.cfg.xml的配置文件) <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate

从源码深入理解spring的 4 种装配模型 与 两种装配技术(byType, byName)以及注解 @Autowired

痴心易碎 提交于 2020-03-04 01:32:36
理解spring的 4 种装配模型 与 两种装配技术(byType, byName) 1. 装配技术 :( byType, byName)是指的怎样找到一个对象的, 2. 装配模型 : 指的是 怎样注入 一个 对象,那就有很多方式!具体是4种(No, byType, byName, xxxx) 3.接下来我们来谈谈 @Autowired 标注在属性字段上面后,对于此bean 来说, 它 到底是用的哪种模型 以及 何种装配技术 呢。 首先网上对 @Autowired 的说法众说纷纭,又说是bytype自动装配,有说是先 byType,后再byName. 其实很少有人讲清楚!!–>其实是必须看了底层源码才明白到底如何, 最后解析下源码!先把结论甩出来! 我觉得: 首先你必须看 @Autowired 它对于作用的bean 来说 他是用的哪种装配模型–> 答案:是 No 模型!! 为啥说是No模型呢(大部分人可能都有混淆或不清楚),因为这是spring对于一个bd(即beandefiniton) 的 默认 属性即默认的装配模型是No。而如果跟源码我们可以看到至 始至终 都没有地方改变过 一般自己定义的bean的 bd的装配模型, (如果采用注解的话是没有直接配置如 xml可以指定bean直接为byType 或其他的专配模型,一般必须借用spring提供的扩展点 更改指定bean装配模型

关于 @Conditional 注解

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-04 00:25:25
关于 @Conditional 注解 背景 在我们项目中,有时候需要实现这样的需求。我有个接口I,接口的实现类有A、B,我需要的效果是通过不同的配置,实例化具体某个实现类,即可以选择实例化A或B 在spring中,有个注解 @Conditional 可以实现这个要求。我们先来 最简单的例子1 1、例子1 接口1个 public interface PrinterService { String print ( String content ) ; } 具体实现2个 @Service @Conditional ( PrinterServiceConditional . InkCondition . class ) public class InkPrinterServiceImpl implements PrinterService { @Override public String print ( String content ) { return "喷墨打印机打印:" + content ; } } @Service @Conditional ( PrinterServiceConditional . LaserCondition . class ) public class LaserPrinterServiceImpl implements PrinterService {

Spring5整合Hibernate5

余生颓废 提交于 2020-03-03 23:25:15
一、概述    Spring整合Hibernate有什么好处?    1、由IOC容器来管理Hibernate的SessionFactory    2、让Hibernate使用上Spring的声明式事务 二、整合步骤: 步骤一:导包 创建Maven项目SpringHibernate,并导入数据库驱动包、Hibernate开发包以及Spring开发包,完成后项目的pom.xml文件内容如下: <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> < dependency > < groupId > org.springframework </ groupId > < artifactId > spring-context </ artifactId > < version > 5.1.1.RELEASE </ version > </ dependency > <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> < dependency > < groupId > org.springframework </ groupId > < artifactId > spring-core

spring——AOP原理及源码(二)

跟風遠走 提交于 2020-03-03 22:47:16
回顾: 在 上一篇 中,我们提到@EnableAspectJAutoProxy注解给容器中加入了一个关键组件 internalAutoProxyCreator的BeanDefinition,实际类型为 AnnotationAwareAspectJAutoProxyCreator的BeanDenation 并且发现这是一个后置处理器,也是一个XXXAware接口的实现类。以及探究了它的继承关系如下。 接下来我们就从后置处理器和BeanFactoryAware的角度来看看AnnotationAwareAspectJAutoProxyCreator的BeanDefinition创建完成后都做了什么。 一、设置调试断点 我们分别进入四个有关类,在类中与后置处理器和BeanFactoryAware有关的方法上打上断点。最终效果如下: AbstractAutoProxyCreator.setBeanFactoryAbstractAutoProxyCreator有后置处理器逻辑{  postProcessBeforeInstantiation()  postProcessAfterInitialization() } AbstractAdvisorAutoProxyCreator.initBeanFactoryAbstractAdvisorAutoProxyCreator

【MyBatis】Spring集成MyBatis示例

与世无争的帅哥 提交于 2020-03-03 17:15:46
配置文件 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd http://www.springframework

spring bean 是什么?它的作用域是哪些?它的生命周期是什么?

邮差的信 提交于 2020-03-03 12:02:14
Spring Bean是事物处理组件类和实体类(POJO)对象的总称,Spring Bean被Spring IOC容器初始化,装配和管理。 或者简单的理解就是对象。 作用域: singlton:单例模式,对象在容器中全局唯一,在IOC容器初始化的时候该对象就会被创建 prototype:多例模式,在每一次调用getBean的时候IOC容器才会创建该对象的实体,并且每次创建都是不同的对象 request:在HTTP请求bean范围内会会对每一个来自客户端的网络请求创建一个实例,在请求完成后,bean会失效并被垃圾回收器回收 session:HTTP session请求范围,确保每个session中有一个bean的实例,同一个session共享同一个bean,不同session,bean也不同。在session过期后、bean会自动失效。仅用于 WebApplicationContext 环境 global-session:除在portlet不一样外,其余情况下与session作用域一样。在portlet中,全局共享一个bean。 生命周期: 实例化-属性赋值-初始化-销毁 大致分为4个,只不过其中穿插了其它,导致不清楚。详细请看 请别再问Spring Bean的生命周期了! 来源: https://www.cnblogs.com/ivy-xu/p/12401162.html

从源码分析Spring是如何解决循环依赖的

試著忘記壹切 提交于 2020-03-03 08:06:05
循环依赖问题 什么是循环依赖 首先看一下下面的Spring配置文件 <!-- beanA依赖于beanB --> <bean id="beanA" class="top.okay3r.ClassA"> <property name="beanB" ref="beanB"/> </bean> <!-- beanB依赖于beanA --> <bean id="beanB" class="top.okay3r.ClassB"> <property name="beanA" ref="beanA"/> </bean> 当IOC容器读取上面的配置时,就会先对beanA进行加载;在对beanA进行属性填充时,会发现beanA依赖于beanB,然后就会对beanB进行加载;当对beanB进行属性填充时,又会发现beanB依赖于beanA,于是就加载beanA… 可以想到,如果Spring的容器对于这种循环依赖问题不作出响应的处理,那么就会无限执行上面的过程。最终的结果就可能造成OOM从而导致程序崩溃 Spring中bean注入的方式 我们知道在Spring中,注入bean的方式有【构造器注入】和【setter注入】两种方式。但在我们使用Spring管理bean时,可能会遇到一种特殊的情况,那么就是上面所说的循环依赖问题 我们再看一下Spring创建bean的过程 Spring创建bean的过程

python实现javaWeb自动建包

强颜欢笑 提交于 2020-03-03 06:24:09
建立工程,导包,配置Tomcat,全部自动化完成。 还在一个个复制配置文件?No。 from os import mkdir from os import makedirs from os import listdir from os . path import join from os . path import basename def copyFile ( src , dest ) : with open ( src , 'rb' ) as f1 , open ( dest , 'wb' ) as f2 : content = f1 . read ( ) f2 . write ( content ) def writeFile ( path , content ) : # 写入指定文件的方法 f = open ( path , 'w' , encoding = 'utf-8' ) f . write ( content ) f . close ( ) proName = input ( '输入新工程名:' ) # 新工程名 basePath = r '' # 工程所在的路径 libSrc = r '' # 40个jar包所在的路径 jQuerySrc = r '' # jquery文件路径,为了防止出错,这里用了1.12.4的版本 contextPath = input (