关于Spring框架

      关于Java基本框架Spring的底层存储原理:(此前需要导入7个关于Spring框架的jar包,这些jar包叫什么名字,自行百度)比如编写一个实体操作类型public class Hello,在该类中写一个say()函数,然后在applicationContext.xml文件中进行<bean id="hello"  class="pojo.Hello"></bean> 在这个配置文件中的id起到植入底层Map集合中的key的作用,所以如果配置文件中有两个id是相同的<bean></bean>的话,就会在加载的时候报错,因为一个Map集合中不能又两个相同的key,会形成覆盖。在测试类中ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");是注册启用了Spring容器,通过Spring容器来进行类的创建,如:Hello hello = (Hello)context.getBean("hello");通过getBean()函数获取底层Map集合中的id来创建Hello这个类的实体,然后调用其内部函数。

       刚才说到<bean></bean>文件中,不能同时出现两个id的事情,因为在加载的时候会出现报错,由于一个Map集合中不能够出现两个key;但是如果id不同但是class相同呢?<bean id="hello" class="pojo.Hello"></bean>

<bean id="helloA"  class="pojo.Hello"></bean> 要是这样的话,那通过Spring容器的方法获取id值肯定不会报错,因为id不一样,底层查询也不一样,但是如果用Spring容器去寻找class的话,Hello hello = (Hello)context.getBean(Hello.class);会在运行的时候报错,因为底层Map不知道该去取走哪个class的对象。

     那对于如何避免当前<bean>文件出现的重名的问题呢?可以通过制造别名的方式<alias name="hello" alias="1806班"></alias>,其中name属性就是<bean id=""></bean> bean标签中的id就是<alias>中的name属性,而别名1806班,是可以通过context.getBean("1806班")去获取到的。

              关于Spring创建对象有四种方式:1.默认的无参构造。2.静态工厂。3.实例工厂。4.Spring提供的FactoryBean这四个方式在配置文件中是这样的。

1.<bean id="hello" class="pojo.Hello"></bean>

2.<bean id="CalendarA" class="pojo.StaticFactory" factory-method="getCalendar"></bean>

3.<bean id="newFactory" class="pojo.InstanceFactory"></bean> <bean id="CalendarB" factory-bean="newFactory" factory-method="getCalendar"></bean>

4.<bean id="CalendarC" class="pojo.SpringFactory"></bean>

对于Spring的单例模式和多例模式:

Spring容器中创建的实例对象默认是单例模式,那什么是单例呢?

举个例子:User user1 = new User(); User user2 = new User();按照JavaSE基础你会直到,这两个属于在堆内存中是不一样的对象,在堆内存中的地址肯定也不一样,其实就是两个东西。

而到了Spring容器中,关于创建实体对象,User user1 = context.getBean("user"); User user2 = context.getBean("user")这两个对象在默认单例模式的情况下,地址是一样的。而多例模式就不一样了,多例模式创建两个对象时,地址时不一样的。而在配置文件当中如何配置呢?<bean id="user" class="pojo.User" scope="prototype"></bean>此为多例,

<bean id="user " class="pojo.User" scope="singleton"></bean>此为单例模式

那么什么时懒加载呢?<bean id="user " class="pojo.User" lazy-init="true"></bean>懒加载就是用户开始选择创建对象时才加载,Spring容器启动时不加载。就是这个意思。在多例模式和懒加载一起执行时,懒加载无论设置为true还是false都是懒加载生效。

猜你喜欢

转载自blog.csdn.net/luolvzhou/article/details/82313416