网站建设播放vr视频西安网站开发公司排名
web/
2025/10/5 20:33:06/
文章来源:
网站建设播放vr视频,西安网站开发公司排名,背景网站建设公司,网页传奇手游游戏大全文章目录 Q1、什么是Spring Bean#xff1f;和对象有什么区别Q2、配置Bean有哪几种方式#xff1f;Q3、Spring支持的Bean有哪几种作用域#xff1f;Q4、单例Bean的优势是什么#xff1f;Q5、Spring的Bean是线程安全的吗#xff1f;Q6、Spring如何处理线程并发问题#xf… 文章目录 Q1、什么是Spring Bean和对象有什么区别Q2、配置Bean有哪几种方式Q3、Spring支持的Bean有哪几种作用域Q4、单例Bean的优势是什么Q5、Spring的Bean是线程安全的吗Q6、Spring如何处理线程并发问题Q7、Spring实例化Bean有几种方式Q8、什么是Bean的装配依赖注入什么是Bean的自动装配自动注入Q9、自动注入有什么限制吗Q10、自动装配的方式有几种 Q1、什么是Spring Bean和对象有什么区别 答案 Bean也是一个对象但它是由Spring IoC容器管理的对象Bean是一个由Spring IoC容器实例化、组装和管理的对象
举例 Q2、配置Bean有哪几种方式 答案 第一种使用xml文件配置
bean classcom.llg.UserService iduserService第二种使用注解
前提需要配置扫描包ComponentScan否则以下注解无效
- Component
而Component又分为
- Controller
- Service
- Repository第三种Bean
标注于方法return一个对象这个对象就会成为一个Bean和Component不同Component依赖反射来创建实例
//Bean可以自己来控制Bean实例化的过程Bean
public DataSource dataSource(){//...// new xxx//设置dataSource对象的各种属性return dataSource;
}第四种Import
//Import只能用在类上
//Import通过快速导入的方式实现把实例加入spring的IOC容器中
Import({ 类名.class , 类名.class... })
public class TestDemo {}
//对应的import的bean都将加入到spring容器中Q3、Spring支持的Bean有哪几种作用域
PS
- 作用域的配置可以在xml中使用scope属性
- 也可在使用Scope注解答案 共有5个
singleton单例在每个Spring IoC容器中只有一个实例默认prototype多例一个bean的定义可以有多个实例request每次http请求都会创建一个bean该作用域仅在基于web的Spring ApplicationContext情形下有效session在一个htpp Session中一个ean定义对应于一个实例该作用域仅限于Web Springapplication一个全局的应用共享一个对象
Q4、单例Bean的优势是什么 答案 使用单例Bean则不会每次都创建新的对象因此在性能上有以下几点的优势
减少了新生成实例的消耗一来Spring依赖反射来生成bean实例会消耗性能给对象分配内存也涉及到复杂算法。二来减少服务器内存的消耗生成的对象少了减少JVM回收可以快速获取到bean因为单例bean的获取除了第一次生成之外其余都是在缓存中获取了所以很快。
Q5、Spring的Bean是线程安全的吗 答案 单例Bean不是线程安全的如果类中声明了成员变量且有对这个变量的读写操作就会线程不安全但是如果把成员变量声明在方法中局部变量—则单例Bean线程安全 demo演示 定义一个单例Bean其成员变量在某方法中有读写操作 new两个线程分别调用beanDemo方法 简单分析下线程1将username改成welcome:AAA后休眠的过程中线程2将username改成welcome:QQQ此时线程休眠结束返回这个Bean的username属性则都返回了welcome:QQQ 如果将username改成beanDemo方法的局部变量则没有此线程安全问题。
Q6、Spring如何处理线程并发问题 A1 将Bean设置为多例 Bean
Scope(prototype)
...A2 将成员变量放在ThreadLocal本地线程中 //修改UserMapper类
public class UserMapper{private ThreadLocalString username new ThreadLocal(); //注意类型和之前的变化public String beanDemo(String uname){username.set(welcome:uname): //set修改try{Thread.sleep(10); }catch(InterruptedException e){e.printStackTrace();}return username.get(); //get拿值}
}虽然现在线程1和线程2操作的是同一个UserMapper对象但username是绑定在各自线程的是各个线程独有的。 A3 加同步锁但这样会影响服务器的吞吐量相当于把之前的并行改成了串行 Q7、Spring实例化Bean有几种方式 A1 构造器方式反射 比如使用xml或Component定义一个Bean则
- BeanDefinition.beanClass
- 使用反射的new Instance底层是在调用构造方法A2 静态工厂的方式 即定义Bean的时候配置下factory-method方法则Spring实例化时会调用factory-method指定的方法去创建Bean注意静态工厂指定的这个方法必须是静态的。
bean classcn.llg.beans.Person idperson factory-methodcreatePerson
/beanA3 实例工厂的方式Bean 在factory-method的基础上再指定factory-bean则实例化时用factory-bean调用factory-method来实例化
bean classcn.llg.beans.Person idperson factory-beanpersonFactoryfactory-methodcreatePerson
/bean别忘了BeanDefinition这个类它里面就有对应属性存储factory-bean和factory-method 当使用Bean时则factoryBeanName就是你的那个配置类而factoryMethodName就是Bean注解下面的那个方法的方法名。 A4 FactoryBean的方式 实现FactoryBean接口重写getObject方法。
//之前的BeanFactory和FactoryBean区别时的那个FactoryBean
private class Car implements FactoryBean{//...Overrridepublic Object getObject() throws Exception{return new Tank(); //汽车变坦克}Overridepublic Class? getObjectType(){return Tank.class;}}总结就是四种且后面这三种我们可以自己控制Bean的创建不再由Spring掌控。
Q8、什么是Bean的装配依赖注入什么是Bean的自动装配自动注入
一个个Bean创建出来没有自动装配纯净态Bean时如果它的一个属性是另一个对象则没有自动装配时这个属性自然为空。之前的这种方式是手动装配
bean idbookService classcom.llg.service.BookServiceproperty namebookDao refbookDao /
/bean----
PS:对应的Java代码
public class BookService{//...private BookDao bookDao;//...
}简单说自动装配即自动注入就是Spring去建立Bean与Bean之间的依赖关系对照上面的代码自动注入即
public class BookService{//...Autowiredprivate BookDao bookDao;//...
}Q9、自动注入有什么限制吗 答案 一定要声明set方法覆盖仍然可以用constructor-arg 和 property 配置来定义依赖且这些配置将覆盖自动注入基本数据类型不能自动装配简单的属性如自动数据类型、字符串但手动注入是可以的如Value模糊特性自动装配不如显式装配精确
bean idbookService classcom.llg.service.BookServiceproperty namebookDao refbookDao1 /
/bean//比如上面给bookService的bookDao属性装配不管BookDao类型的Bean有多少我就只要id为bookDao1的Q10、自动装配的方式有几种
在定义bean的xml中输入autowired属性就可以看到有5种 在spring中对象无需自己查找或创建与其关联的其他对象由容器负责把需要相互协作的对象引用赋予各个对象使用autowire来配置自动装载模式。在Spring框架xml配置中共有5种自动装配
no即默认不自动装配需要手动设置ref属性来进行装配BeanbyName通过bean的名称进行自动装配如果有一个bean的name和待装配的bean的property相同对应代码中的setXXX后面的XXX而不是直接找属性名则自动装配byType通过参数的类型来自动装配constructor利用构造函数进行装配看构造函数的形参的类型去找找到多个时再按形参名自动装配
public Class CarFactory{private Tank tank;public CarFactory(Tank tank) {this.tank tank; //按构造函数来自动装配}
}autodetect自动探测若有构造方法则按construct的方式没有则按byType的方式在Spring3.0已经弃用
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87547.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!