学习java100多天和1天的记录----Spring的IOC、DI等等等等

 学习一天做总结,其中有我写的笔记,有老师的笔记,有网上找的视频内容,错误内容可不可以告知,权侵删。

spring是什么?

  是容器框架,就是IOC+AOP

  作用:可以配置各种bean(action/service/domain/dao),并且可以维护beanbean之间的关系,

 

 

bean元素的作用:

  当我们的spring框架加载的时候,spring就会自动创建一个bean对象,并放入内存

  ioc是什么:

  (inverse of control)控制反转,就是把创建对象(bean)、维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml)中

  实例:UserService.java中有个ByService.java的属性,xml中:

  <bean id=”userService” class=”com.service.UserService”>

  <!--注入:--!>

    <property name=”name”>
      <value></value>

    </property>

  <!--依赖,在userService中引用byService bean-->

    <property name=”byService” ref=”byService” />

  </bean>

  <bean id=”byService” class=”com.service.ByService”>

    <property name=”name” value=”” />

  </bean>

 

自动装配、获取bean的方法:

  ApplicationContext ac=new ClassPathXmlApplicationContext("application-context.xml");

  1ac.getBean(“name”)

  2ac.getBean(User.class)

  3ac.getBean(“name”,User.class)

 

  DI是什么:

  依赖注入,依赖:一个bean中插入另一个bean<property name="byService" ref="byService" />

  注入:将属性的值注入到<property name="name" value="小刘" />

 

  注入属性方式:

  注入的意思:一个类实例化后属性的值不是在类中赋值,是在XML文件中赋值的,叫注入属性。

  1setter注入,User.java类中需要有setter方法,bean对象中通过setter方法,.setName()方法给属性赋值,XML文件中:

  <bean id=”dog1” class=”com.bwf.entity.Dog”>

    <property name=”type” value=”二哈” />

  <bean>

  2、构造方法注入,通过bean对象中的构造器给属性赋值。XML文件中:

  <bean id=”dog2” class=”com.bwf.entity.Dog”>

    <constructor-arg value=”哈巴狗”><constructor-arg/>

  <bean>

  其中value中的值叫字面值,是String

 

怎么把集合注入值:<list></list>,把3个值注入empName

  <property name=”empName”>

  <list>

    <value>”a”</value>

    <value>”b”</value>

    <value>”c”</value>

  </list>

怎么把<list>对象注入值:<list></list>,把3个值注入empName

  <property name=”empName”>

  <list>

    <ref bean=”emp1” />

    <ref bean=”emp2” />

  </list>

  </property>

 

 

依赖:

Spring 允许用户通过denpends-on属性设定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好。

如果前置依赖于多个Bean,则可以通过逗号,空格或的方式配置Bean的名称。

<bean id=”person” class=”com.bwf.entity” p:name=”赵武” p:car-ref=”car1” denpend-on=”car1”></bean>

 

 

 

bean的继承:

 <bean id="car2" class="com.bwf.entity.Car">

      <property name="type" value="宝马"></property>

      <property name="factory" value="大众"></property>

      <property name="price" value="200000"></property>

     </bean>

  <bean id="car3" parent="car2" p:type ="大众" ></bean>

上面car3继承car2type改为大众,pXML最上面引入配置。

 

bean生命周期:

 

1、实例化:

当程序加载XML文件时就开始实例化bean(前提是scope=singleton),把bean实例导入内存中,示例:class中构造函数中写入syso方法。

2、调用setter设置属性,设置属性值<property name=”” value=””>

3、调用BeanNameAware接口(bean名字关注)的setBeanName()方法

如果该类实现了BeanNameAware(bean名字关注)接口,则可以通过setBeanName方法获取该beanid号。

4、调用BeanFactoryAware接口(bean工厂关注)的setBeanFactory()方法

如果该类实现了BeanFactoryAware(bean名字关注)接口,则可以通过setBeanFactory()方法获取该bean的工厂。

5、调用ApplicationContextAware接口(上下文关注)的setApplicationContext()方法

如果该类实现了这个接口,则可以通过setApplicationContext()方法获取该bean的上下文。

6、如果一个bean和后置处理器(BeanPostProsessor)关联,则自动调用后置处理器的

postProsessBeforeInitialization()方法。

7、如果类实现了initializingBean接口,则会调用afterpropertiesSet()方法,

8、调用定制的初始化方法,如果自己在bean中写<bean init-method=”init”  />则可以在bean中定义自己的初始化方法init()。

9、如果一个bean和后置处理器(BeanPostProsessor)关联,则自动调用后置处理器的

postProsessAfterInitialization()方法。

10、使用bean

11、容器关闭。

12、可以通过实现DisposableBean接口来调用的destroy()方法。

13、可以在Bean<bean destroy-method=”fun1” />,调用定制的销毁方法。

小结:实际开发中,没有用到这么多步骤,用的多的是:

1--->2--->6--->9--->11

上面的是通过applicationcontext创建的bean

通过beanfactory创建的bean生命周期要少:

1--->2--->3--->4--->7--->8--->10--->11--->12--->13

Bean的作用域:5个:

<bean id="testScope" class="com.bwf.test.TestScope" scope=""></bean>

其中scope有四种属性:

1request:只有一个bean,一次请求得到一个bean,重新请求再得到一个bean,上个bean废弃,相当于重新newbean

2session:针对整个session会话

3singleton:默认属性,单例,最多创建一个,都引用的是同一个对象

4prototype:多份,每次都是一份新的实例。

5global-session:MyEclipse好像没有这个了

注解配置spring bean

1application-context.xml中把application-context.xml勾中

   a<beans>中写上<context:annotation-config /> 代表启用注解方式

b<beans>中写上:

<context:component-scan base-package="com.bwf" />

指定要扫描的包成为spring bean

2)注册spring bean(被调用的地方):class表名上写:

@Component : 通用的spring bean,无需指定创建的beanid的值,默认的命名策略:类名首字母小写,作为默认的id值。

@Component(value=”abc”)  :abc代替了<bean>中的id=”abc”

@Controll : 控制器级别注解,通常用来注解控制器

@Service service级别注解,通常用来注解service

@Repository : dao级别注解,通常用来注解dao:

@Repository(value=”name”)

posted @ 2018-10-31 18:52  牛牛11  阅读(181)  评论(0编辑  收藏  举报