Spring
1.什么是IoC
IoC(Invertion of Control),控制反转,解耦合,轻量级。
具体上可以说,以前我们通过在程序里主动创建对象实例实现组件间的依赖关系,会造成组件间互相耦合。
而IoC将实现组件关系交由外部容器来管理,即由容器在运行期将组件间的某种依赖关系动态注入到组件中。
通俗来讲,以前我们要一个什么东西,完全要自己造,要原料,要方法,要实际操作等等。而现在,则是我们提出要一个东西,然后IoC的容器就给我们直接送过来了。
2.什么是DI
DI(Dependency Injection),依赖注入,即将服务注入到使用它的地方。对象只提供普通的方法让容器去决定依赖关系。
容器全权负责组建的装配,它会把符合依赖关系的对象通过属性(setter()),或是构造器传递给需要的对象。
3.什么是Bean
pojo和JavaBean有相同有不同:
1.pojo(plain old java object):
pojo是一个简单的、普通的Java对象它包含业务逻辑处理货持久化逻辑等,但不是JavaBean,不具有任何特殊角色,不继承或不实现任何其他Java框架的类或接口。
pojo可以认为是一个中间对象,可以转化为PO、DTO、VO
2.JavaBean
JavaBean是一个遵循特定写法的Java类,是一种Java语言编写的可重用组件,它的方法命名,构造及行为必须符合特定的约定:
<1>这个类必须具有一个公共的(public)无参构造函数;
<2>所有属性私有化(private);
<3>私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。
<4>这个类应是可序列化的。(比如可以实现Serializable 接口,用于实现bean的持久性)
JavaBean在Java EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象(内省机制),并且通过反射那些遵循命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
3.Bean
即豆子,含义是可重用Java组件,所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和运行方式的群体。使用它的对象只能通过接口来操作。
1.ApplicationContext
取得方式
1.本地文件 2.ClassPath 3.Web应用中依赖servlet或Listener
2.如下,返回一个ApplicationContext对象
new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" } )
然后可以通过context对象的getBean("id")取得bean对象。
2.BeanFactory
1.通过xml文件注册,注入值和对象。
通过在xml中写入,完成对该pojo的注册,当IoC容器加载的时候,会将Bean实例化,然后到使用的时候,再通过容器的方法来获得Bean的实例对象。
id唯一标识这个bean对象,class是pojo类的全限名。
在中的name中填入pojo类的属性名,value后跟相应的值。
如果是注入对象的话,则用ref,后跟对象对应类型的Bean的Id。
2.注入值的对象,可以分设值注入与构造器注入。
设值注入如下
.xml
pojo
class Bean
{
String name;
public void setName(String name)
{ this.name=name; }
}
构造器注入如下
.xml
pojo
class Bean
{
String name;
public Bean(String name);
{ this.name=name; }
}
不管是设值注入还是构造器注入,在xml设值属性的name那里,都应该与实际pojo类的属性名一致,不然会注入失败。
3.注解注入
先说两个配置:
对于类MyInformation,自主设置id和默认设置id,及取得bean的方式
@Repository("lin")
class MyInformation{}
//通过context取得bean
context.getBean("lin");
@Repository
class MyInformation
//通过context取得bean
context.getBean("myInformation");
及默认会将该类的类名,首字母小写后,设为bean的id。
2.对于完成了注册的Bean来说(xml或注解),可以通过注解自动装载Bean属性。
自动装载常用的是三种方式。
在
<1>当设置default-autowire为byName时,对象注入不需要再写
<2>设置为byType时,如果有依赖类,则是根据该类的类型,去容器里搜索,如果有多个结果会报错,如果单个结果,则按该结果完成对象注入。
<3>和<2>类似,都是按照类从容器中匹配的,只是是按值注入和构造器注入的区别。
而@Autowired则是按照类型来进行自动装载的。
当@Autowired标记某个成员变量或者setter()方法时,会在容器中根据该变量类型去找匹配Bean,找得即注入。
搭配使用:
@Required
@Qualifier
@Resource
@Order
@Scope
装载List和Map对象
@Configuration
@Bean
@ImportResource
@Value
bean的生命周期和作用域
-----7.22未完