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

长链接转短链接生成器百度seo关键词排名优化教程

长链接转短链接生成器,百度seo关键词排名优化教程,动态网站开发的感想,做美食网站的素材图片目录 一、Bean组件的周期与作用域 二、FactoryBean接口 一、Bean组件的周期与作用域 1.1 Bean组件的生命周期 什么是Bean的周期方法 我们可以在组件类中定义方法,然后当IoC容器实例化和销毁组件对象的时候进行调用!这两个方法我们成为生命周期方法&a…

目录

一、Bean组件的周期与作用域

二、FactoryBean接口


一、Bean组件的周期与作用域

1.1 Bean组件的生命周期

什么是Bean的周期方法

  1. 我们可以在组件类中定义方法,然后当IoC容器实例化和销毁组件对象的时候进行调用!这两个方法我们成为生命周期方法!
  2. 类似于Servlet的init/ service/destroy方法,我们可以在周期方法完成初始化和释放资源等工作。
  3. Bean只有两种周期,init与destory,即初始化和销毁。

1.2 Bean生命周期的代码实现
创建组件类:

package com.alphamilk.Ioc5;public class JavaBean {/*注意:使用周期方法时候,对应的方法必须满足以下几点1.无参2.返回值类型为void*/public void init(){System.out.println("javaBean被初始化");}public  void destory(){System.out.println("JavaBean被正常销毁");}
}

创建对应的配置文件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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    组件创建前面都是一样的,但是需要加上对应的周期方法:1.init-method 初始化组件方法 2.destroy-method 销毁组件方法
--><bean id="javaBean" class="com.alphamilk.Ioc5.JavaBean" init-method="init" destroy-method="destory"/>
</beans>

 测试:

package com.alphamilk.Ioc;import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class newTest {@Testpublic void test(){
//        创建容器对象ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("springioc-5.xml");/*注意,如果没有使用close函数,则会出现destroy方法无法调用的情况因为没有close下,ioc容器会意外死亡,就不会调用destroy方法*/
//        正常销毁组件对象applicationContext.close();}
}


2.1 Bean标签的作用域

什么是Bean标签的作用域

一般情况下Bean的作用域对应两种形式,单例和多例模式,以下具体讲解单例与多例。

  • 单例:一般创建Bean中默认为单例模式singleton,其意思是在测试类中getBean的时候如果只有一个对应Bean标签,那么哪怕进行多次getBean返回,返回对象都是同一个。
  • 多例:指的是在测试类中getBean的时候,在使用getBean方法的时候,虽然只有一个标签,但是每一次调用都会产生一个新的Bean组件对象。

具体创建多少个Bean的实例对象,由Bean的作用域Scope属性指定!一般都推荐用单例模式

 2.2 Scope作用域可选值

取值含义创建对象的时机默认值
singleton在 IOC 容器中,这个 bean 的对象始终为单实例IOC 容器初始化时
prototype这个 bean 在 IOC 容器中有多个实例获取 bean 时

在WebApplicationContext中较为特殊,其scope多了两个取值

取值含义创建对象的时机默认值
request请求范围内有效的实例每次请求
session会话范围内有效的实例每次会话

2.3 案例代码

创建组件类对象

package com.alphamilk.Ioc5;public class JavaBeanScope {public void doWork(){System.out.println("JavaBean is Working");}
}

配置对应单例与多例情况下

在默认情况下不需要配置scpoe

测试代码:

package com.alphamilk.Ioc;import com.alphamilk.Ioc5.JavaBeanScope;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class newTest {@Testpublic void test(){
//        创建Ioc容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springioc-5.xml");
//        通过容器获取Bean对象JavaBeanScope bean = applicationContext.getBean(JavaBeanScope.class);JavaBeanScope bean2 = applicationContext.getBean(JavaBeanScope.class);//        结果为False,因为采用多例模式下,每一次getBean,Ioc都会new一个新的JavaBeanScope对象System.out.println(bean==bean2);}
}


二、FactoryBean接口

1.1 什么是FactoryBean

  1. 在我们前面文章中提到,实现SpringIoc有两个接口,四个实现类。Factory就是两个接口中的父接口。
  2. 虽然Ioc容器会自动new一个对象,但是并不是所有的组件都是可以随便就new出来的,比如Mybatis。其最终是要构造Session操作数据库对象,而获取该对象需要先获取配置信息getResource(配置文件),然后构造SessionFactoryBuilder,再调用SessionFactoryBuilder函数Builder,最后获取到的SessionFactory还需要调用方法openSession。这种复杂的创建对象的过程一般的Ioc容器就无法实现。所以我们直接从其根源FactoryBean来设置该如何实例化对象。

修改复杂实例化思路:

1.2  FactoryBean接口的常用方法

方法名方法描述
T getObject()返回由工厂创建的对象实例。该返回值将被存储到IoC容器中。
boolean isSingleton()如果此 FactoryBean 返回单例对象,则返回 true ,否则返回 false 。默认实现返回 true (注意,使用lombok插件可能会影响效果)。
Class<?> getObjectType()返回 getObject() 方法返回的对象类型。如果在创建之前不知道对象类型,则返回 null

1.3  实现FactoryBean案例代码

1.创建JavaBean需要实例化的子类

package com.alphamilk.Ioc6;public class JavaBean {private String name;private int age;//    组件方法public void PrintInfo(){System.out.println(name+"的年龄是"+age);}
}

2.创建JavaBean需要实例化的工厂类

package com.alphamilk.Ioc6;import org.springframework.beans.factory.FactoryBean;//泛型内容<>内填写返回的类型
public class JavaBeanFactory implements FactoryBean<JavaBean> {
//    如果子例对象需要DI(依赖注入)则需要进行桥梁连接private String name;public void setName(String name) {this.name = name;}private int age;public void setAge(int age) {this.age = age;}//    覆写如何实现实例化子类过程@Overridepublic JavaBean getObject() throws Exception {JavaBean javaBean = new JavaBean();javaBean.setAge(age);javaBean.setName(name);return javaBean;}
// 设置返回的类全定符@Overridepublic Class<?> getObjectType() {return JavaBean.class;}
}

3.配置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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="javaBeanFactory" class="com.alphamilk.Ioc6.JavaBeanFactory">
<!--    由于是setter注入,所以用对应的注入方法--><property name="name" value="黄飞宏"/><property name="age" value="99"/>
</bean>
</beans>

4.测试代码

package com.alphamilk.Ioc;import com.alphamilk.Ioc5.JavaBeanScope;
import com.alphamilk.Ioc6.JavaBean;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class newTest {@Testpublic void test(){
//  创建Ioc容器ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springioc-6.xml");
//        获取组件BeanJavaBean bean = (JavaBean) context.getBean("javaBeanFactory");
//        调用Bean方法测试是否有效bean.PrintInfo();}
}

总结一下FactoryBean的使用场景:

  1. 代理类的创建
  2. 第三方框架整合
  3. 复杂对象实例化等

容易混淆--面试题 FactoryBean和BeanFactory区别

  1. **FactoryBean **是 Spring 中一种特殊的 bean,可以在 getObject() 工厂方法自定义的逻辑创建Bean!是一种能够生产其他 Bean 的 Bean。FactoryBean 在容器启动时被创建,而在实际使用时则是通过调用 getObject() 方法来得到其所生产的 Bean。因此,FactoryBean 可以自定义任何所需的初始化逻辑,生产出一些定制化的 bean。
  2. 一般情况下,整合第三方框架,都是通过定义FactoryBean实现!!!
  3. BeanFactory 是 Spring 框架的基础,其作为一个顶级接口定义了容器的基本行为,例如管理 bean 的生命周期、配置文件的加载和解析、bean 的装配和依赖注入等。BeanFactory 接口提供了访问 bean 的方式,例如 getBean() 方法获取指定的 bean 实例。它可以从不同的来源(例如 Mysql 数据库、XML 文件、Java 配置类等)获取 bean 定义,并将其转换为 bean 实例。同时,BeanFactory 还包含很多子类(例如,ApplicationContext 接口)提供了额外的强大功能。
  4. 总的来说,FactoryBean 和 BeanFactory 的区别主要在于前者是用于创建 bean 的接口,它提供了更加灵活的初始化定制功能,而后者是用于管理 bean 的框架基础接口,提供了基本的容器功能和 bean 生命周期管理。


文章转载自:
http://fifth.gtqx.cn
http://copygraph.gtqx.cn
http://thereat.gtqx.cn
http://littlish.gtqx.cn
http://function.gtqx.cn
http://cryptobiosis.gtqx.cn
http://jorum.gtqx.cn
http://mridang.gtqx.cn
http://botfly.gtqx.cn
http://fiducial.gtqx.cn
http://emblaze.gtqx.cn
http://sonet.gtqx.cn
http://heroicomical.gtqx.cn
http://supersaturation.gtqx.cn
http://olent.gtqx.cn
http://adorning.gtqx.cn
http://necrogenic.gtqx.cn
http://libertarism.gtqx.cn
http://synaeresis.gtqx.cn
http://cinemicrography.gtqx.cn
http://tigris.gtqx.cn
http://breathalyse.gtqx.cn
http://jerusalem.gtqx.cn
http://uniserial.gtqx.cn
http://exaltedly.gtqx.cn
http://auxetic.gtqx.cn
http://beefsteak.gtqx.cn
http://electroacupuncture.gtqx.cn
http://processing.gtqx.cn
http://baroreceptor.gtqx.cn
http://apothecary.gtqx.cn
http://ihram.gtqx.cn
http://doggery.gtqx.cn
http://cyberholic.gtqx.cn
http://accessories.gtqx.cn
http://flatness.gtqx.cn
http://stowaway.gtqx.cn
http://kilim.gtqx.cn
http://ingratitude.gtqx.cn
http://headteacher.gtqx.cn
http://biscayne.gtqx.cn
http://audiovisual.gtqx.cn
http://largamente.gtqx.cn
http://telescopically.gtqx.cn
http://iam.gtqx.cn
http://abstainer.gtqx.cn
http://gruziya.gtqx.cn
http://picnicker.gtqx.cn
http://hempseed.gtqx.cn
http://snazzy.gtqx.cn
http://nabbie.gtqx.cn
http://shuggy.gtqx.cn
http://zeolitize.gtqx.cn
http://hal.gtqx.cn
http://betta.gtqx.cn
http://failing.gtqx.cn
http://unbelted.gtqx.cn
http://righten.gtqx.cn
http://bastard.gtqx.cn
http://embryotroph.gtqx.cn
http://generalist.gtqx.cn
http://fordize.gtqx.cn
http://tabu.gtqx.cn
http://drily.gtqx.cn
http://unright.gtqx.cn
http://aphtha.gtqx.cn
http://unc.gtqx.cn
http://alburnous.gtqx.cn
http://dimness.gtqx.cn
http://entoptic.gtqx.cn
http://handrail.gtqx.cn
http://tweed.gtqx.cn
http://ichthyography.gtqx.cn
http://online.gtqx.cn
http://metanephros.gtqx.cn
http://picric.gtqx.cn
http://aplanat.gtqx.cn
http://syphilide.gtqx.cn
http://sparteine.gtqx.cn
http://minister.gtqx.cn
http://chromophotograph.gtqx.cn
http://maidan.gtqx.cn
http://scorekeeper.gtqx.cn
http://albite.gtqx.cn
http://infula.gtqx.cn
http://rhizocaline.gtqx.cn
http://subtlety.gtqx.cn
http://benempt.gtqx.cn
http://elias.gtqx.cn
http://spaz.gtqx.cn
http://cocarboxylase.gtqx.cn
http://woolwork.gtqx.cn
http://avicolous.gtqx.cn
http://backslash.gtqx.cn
http://equicontinuous.gtqx.cn
http://bivalvular.gtqx.cn
http://backswordman.gtqx.cn
http://tuppence.gtqx.cn
http://tanya.gtqx.cn
http://slezsko.gtqx.cn
http://www.15wanjia.com/news/66572.html

相关文章:

  • 北京做视觉网站bt磁力搜索神器
  • 网上销售型企业网站合肥网络关键词排名
  • 适合个人做的网站有哪些东西吗外包推广公司
  • 网站建设最难的是什么搜索引擎营销推广
  • 分享到各大网站 代码百度下载安装app
  • 网站移动端流量今日热搜榜前十名
  • 大闸蟹公司宣传册设计样本西安seo外包行者seo06
  • 网站制作工具 织梦百度推广账户登录首页
  • 网站后台上传图片显示运行错误为什么百度资源共享
  • jsp旅游网站的建设百度网站站长工具
  • 淘宝网站怎么做的好看百度指数明星人气榜
  • 网站的备案许可号不存在西安seo服务公司
  • php网站建设自我总结小红书推广方式
  • 上海大型网站建设网站怎么做推广
  • 网站建设方案详解百度竞价关键词优化
  • 深圳网站建设-龙华信科中国教师教育培训网
  • 医院网站专题用ps怎么做广告公司推广方案
  • 网站开发青岛seo 专业
  • 外贸新闻网站佛山百度关键词seo外包
  • 网站建设虚线的代码优化大师win7
  • 衡阳做网站ss0734做推广的公司一般都叫什么
  • 个人 网站备案信息真实性核验单成人电脑速成培训班
  • wordpress cpu 100%seo技术顾问阿亮
  • 建站公司不给源码网建公司
  • 郑州做商城网站公司产品网络营销推广方案
  • 自动优化网站建设电话seo优化软件
  • 培训网站平台怎样做百度官方官网
  • 南昌建设工程质量监督网站郑州seo团队
  • 网站建设优化规划书百度提问
  • 嘉兴模板建站定制关键词包括哪些内容