spring01课堂笔记

获取容器的三种方式
* 1 ClassPathXmlApplicationContext:默认去类路径下【src】加载该配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Book bean = context.getBean(Book.class);
System.out.println(bean);

* 2 FileSystemXmlApplicationContext:默认去本地磁盘加载该配置文件
ApplicationContext context = new FileSystemXmlApplicationContext("E:\\develpment\\Eclipse\\spring01\\src\\applicationContext.xml");
Book bean = context.getBean(Book.class);
System.out.println(bean);
* 3 xmlBeanFactory的方式
Resource resource = new FileSystemResource("E:\\develpment\\Eclipse\\spring01\\src\\applicationContext.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource);
Book bean = factory.getBean(Book.class);
System.out.println(bean);

获取容器中bean对象的两种方式:
* 1.通过字节码方式
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Book bean = context.getBean(Book.class);
* 2.通过容器中bean对象的id或者name值的方式
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//applicationContext.xml中<bean name="book" class="com.offcn.bean.Book"></bean>
Book b = (Book)context.getBean("book");
两种方式的区别:
* 1.参数不同,一个参数是字节码,一个是字符串类型的id或name值
* 2.返回值也不相同,字节码类型的对象和Object类型的对象
* 3.参数如果是字节码:要求容器中有该类型的唯一bean对象,没有不行、两个及两个以上也不行
<bean name="person1" class="com.ujiuye.bean.Person"></bean>
<bean name="person2" class="com.ujiuye.bean.Person"></bean>
/*
报错信息:.NoUniqueBeanDefinitionException: No qualifying bean of type [com.ujiuye.bean.Person] is defined:
expected single matching bean but found 2: person1,person2
*/

* 容器中bean对象的创建时机、底层原理、是否单例
* 1.创建时机: 默认是在容器加载的时候,容器中的bean对象按着从上到下的顺序依次被创建出来
  @Test
  public void test01() {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  容器一加载,通过反射创建类的对象,类的空参构造执行
  public Book() {
  System.out.println("单例Book对象创建了");
* 2 底层原理:反射
* 3是否单例: 默认是单例的,如果想改成多例的,需要设置bean标签的scope属性值
  *scope:
  singleton:默认值,表示该对象是单例的,是随着容器的加载该bean对象被创建出来
    出生:容器创建对象就出生了
    活着:只要容器在,对象就一直在
    死亡:容器销毁,对象消亡
    (相对整个容器而言)
  prototype:多例的,该对象是我们从容器中获取bean对象的时候才被创建,而不是随
      着容器的加载该对象被创建出来。
      ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      Book book1 = context.getBean(Book.class);
      public Book() {
      System.out.println("多例Book对象创建了");
     出生:每次使用都会创建新对象
     活着:只要对象在使用中就一直活着
     死亡:当对象长时间不适用并且也没有别的对象引用时,由java的垃圾回收器回收.
    (相对一个对象而言)

  request:表示每个request请求都会创建一个新的bean对象
  session:表示每个session会话都会创建一个新的bean对象
  globalsession:表示一次全局会话会创建一个新的bean对象

    Book book1 = context.getBean(Book.class);
    Book book2 = context.getBean(Book.class);
    System.out.println(book1==book2);
    单例时,返回的是true值:
    多例时:返回的是false值
设置scope属性<bean class="com.offcn.bean.Book" scope="prototype"></bean>

DI 全称:Dependency Injection:依赖注入,IOC是一种思想,DI是具体实现。
public class UserService {
public void success() {
System.out.println("service类的success方法成调用");
}
}
public class UserServlet {
private UserService userService;

public void success() {
userService.success();
}

public void setUserService(UserService userService) {
this.userService = userService;
}

}
<bean id="userService" class="com.offcn.bean.UserService"></bean>
<bean class="com.offcn.bean.UserServlet">
<!--name表示类的属性名,ref表示把id为userService的对象赋值给UserServlet的userService属性 -->
<property name="userService" ref="userService"></property>
</bean>

猜你喜欢

转载自www.cnblogs.com/bai3535/p/12052501.html