- Bean的装配之动态工厂方式
(1) 如何理解Bean的装配?
Bean的装配即bean(类对象)的装配
(2) 动态工厂方式创建Bean的步骤有哪些?
① 注册工厂
<!--使用Factory动态工厂创建对象 -->
<bean id="serviceFactory" class="com.bjsxt.beanFactory.ServiceFactory"></bean>
② 从工厂中获取bean对象
<bean id="someServiceImpl" factory-bean="serviceFactory" factory-method="getSomeService"></bean>
③ 创建容器对象,在容器中获取bean对象
/**
* 动态加载bean对象
*/
@Test
public void SomeTest02(){
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
SomeServiceImpl ss = bf.getBean("someServiceImpl",SomeServiceImpl.class);
ss.printMessage();
}
- Bean的装配之静态工厂方式
(1) 静态工厂方式创建Bean的步骤有哪些?
① 直接在工厂中注册bean对象
<!--使用Factory工厂静态创建对象 -->
<!-- <bean id="someServiceImpl" class="com.bjsxt.beanFactory.ServiceFactory" factory-method="staticGetSomeService"></bean> -->
② 创建容器对象,在对象中获取
/**
* 使用factory工厂静态加载bean对象
*/
@Test
public void SomeTest04(){
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
SomeServiceImpl bean = act.getBean("someServiceImpl",SomeServiceImpl.class);
bean.printMessage();
}
(2) 动态工厂方式和静态工厂方式的区别?
静态工厂:指的是工厂的服务是静态的,也就是工厂提供的方法是static的,这些方法仅有工厂提供以及管理更行等,与客户端或者说调用段是没有关系的,示例工程指的是工厂提供的方法服务是非static的,客户端或者调用端需要自己去创建工厂对象然后去调用工厂中的方法或者服务。
所以,静态工厂和实例工厂主要是参与管理工厂管理者的不同,其次就是动态工厂相对灵活,客户端和工厂都参与了设计,静态工厂相对死板。
- Bean的作用域
(1) 什么是Bean的作用域?
对象在容器中保存的形式,
singleton:单例模式,在容器仅存在一个bean实例,默认是singleton
prototype:原型模式,每次从容器调用对象时都创建一个新的bean对象
(2) Bean的作用域设置为prototype表明什么意思?
prototype:原型模式,每次从容器调用对象时都创建一个新的bean对象
DI之设值注入
(1) 什么是DI?
依赖注入:给对象的属性赋值
(2) DI大体几种实现方式?
基于xml的注入:设值注入,构造注入
基于注解的注入:常用注解(@Component、@scope、@value、@resource、@autowired)
(3)集合的注入方式
<property name="str">
<array>
<value>哥伦布</value>
<value>莎士比亚</value>
<value>郑和</value>
</array>
</property>
<property name="spart">
<set>
<ref bean="partner"/>
<ref bean="partner2"/>
</set>
</property>
<property name="list">
<list>
<ref bean="partner"/>
<ref bean="partner2"/>
</list>
</property>
<property name="map">
<map>
<entry key="工龄" value="10" ></entry>
<entry key="薪资" value="20000" ></entry>
</map>
</property>
<property name="prop">
<props>
<prop key="爱好">篮球</prop>
<prop key="兴趣">编程</prop>
<prop key="工作">码农</prop>
</props>
</property>
<bean id="partner" class="com.bjsxt.pojo.Partner" >
<property name="name" value="伊丽莎白"></property>
</bean>
<bean id="partner2" class="com.bjsxt.pojo.Partner" >
<property name="name" value="伊丽莎白二世"></property>
</bean>
每种集合属性通过什么标签进行注入?
String:
Set:
List:
Map:
(4) 什么是域属性自动注入?
对属性值进行注入,有两种实现方式,byName,byType,一个是局部的,一个是全局的。
(5) 域属性自动注入byType方式有什么条件?
ByType:是全局的只要域属性的类型与需要注入的类型一致,即可注入
(6) 如何给属性注入空字符串?
(7) 如何给属性注入null?
- DI之构造注入
(1) 构造注入底层通过什么方式进行注入的?
通过构造方法进行注入
(2) 常见的构造注入方式有哪些?
通过构造方法的参数名进行注入。通过构造方法的下标进行注入
- DI之注解
(1) 请描述本节课的注解有哪些,分别是什么作用?
@Compontent:将当前类作为一个组件交给容器进行管理
在类中的属性上设置@Value(“”)来进行赋值
@Autowired:默认情况下是通过byType注入,如果使用byName方式,自动注入需要使用@Qualifier
@Resource:实现注入,默认使用byName进行注入,如果找不到Name匹配的,会使用byType进行注入
请描述@Autowired和@Resource的区别?
@Autowired:默认情况下是通过byType注入,如果使用byName方式,自动注入需要使用@Qualifier
@Resource:实现注入,默认使用byName进行注入,如果找不到Name匹配的,会使用byType进行注入
Bean相关常用注解
(1) Bean相关常用注解
@Repositiry:添加Dao实现类上,将实现类交给spring容器来进行管理
@Service:添加在Service实现类上,将实现类交给spring容器来进行管理
@Controlelr:添加在controller上
(2) @Scope常用的取值有哪些?
@Scope(“singleton”):单例模式
@Scope(“prottotype”):原型模式
如果不在类上添加该注解,默认单例模式