javaweb实训第五天上午——Spring基础(1)https://developer.aliyun.com/article/1415048
添加文档声明和约束(这个东西不需要记忆):
(1)可以参考文档,中英文文档都可以;
①spring-framework-4.1.2.RELEASE\docs\spring-framework-reference\pdf
(2)可以参考资源中的资料;
(3)可以百度spring的配置文件;
- (4)也可以直接拿以下内容去修改
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> </beans>
第三步:编写逻辑代码
1.准备一个普通的Java类(MyBean)
public class MyBean { public void hello(){ System.out.println("hello spring..."); } }
第四步:将这个类交给Spring去管理即注册到Spring容器中
大家要记得,Spring是一个容器,我们需要把我们的类交给Spring去管理。 因为,我们的测试是创建一个普通的类,然后再通过Spring帮我们把这个类的对象创建出来就算是成功了;
在配置文件中将这个Java类交给Spring管理。在applicationContext.xml中配置
<beans ...> <bean id="myBean" class="cn.cxjcloud._01_hello.MyBean"></bean> </beans>
元素和属性讲解:
bean元素:表示对象配置或注册标签;
id属性:这个bean对象在Spring容器中的唯一标识,也可以使用name,常用id(唯一特性),获取这个对象的时候就可以通过这个表示来获取;
class属性:对应对象所属类的完全限定名。注意这里可以是JDK自带的类,也可以是自己新建的类;
注意:Spring容器中不允许有两个名字【不管是id指定还是name指定】一个的对象
问题:我想使用或者获取Spring容器创建的这个对象或Bean,那么如何操作?
4.2.Spring容器的实例化(如何创容器对象_测试用)
- Spring容器对象有两种:BeanFactory和ApplicationContext;
- ApplicationContext继承自BeanFactory接口,拥有更多的企业级方法,推荐使用该类型;
4.2.1.BeanFactory
- BeanFactory是一个接口,可以通过其实现类XmlBeanFactor获取其实例。接口中有一个getBean()方法可以获取Spring容器中配置或注册的Bean对象;
@Test public void testHelloSpring() throws Exception { /** *我们第一步是要启动框架,而启动框架则需要拿到Spring的核心对象 *咱们学习的第一个核心对象是BeanFactory : 顾名思义,这是一个创建Bean的工厂 *而Bean工厂创建对象又必需拿到配置文件中的数据 *因为:我们的第一步读取配置文件,拿到BeanFactory工厂 */ //第一步:读取资源文件 Resource resource = new ClassPathResource("applicationContext.xml"); //第二步:拿到核心对象 BeanFactory BeanFactory factory = new XmlBeanFactory(resource); }
4.2.2.ApplicationContext(推荐使用)
ApplicationContext的中文意思是"应用程序上下文",它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为JavaEE应用之首选,可应用在Java APP与Java Web中;
- 要使用ApplicationContext的功能,必需要导入相应的jar包:
spring-context-4.1.2.RELEASE.jar -- 上下文 spring-expression-4.1.2.RELEASE.jar -- Spring表达式语言
//加载工程classpath下的配置文件实例化 String conf = "applicationContext.xml"; ApplicationContext factory = new ClassPathXmlApplicationContext(conf);
4.2.3.获取对象方式
方式一:通过id直接拿到相应的Bean对象
//通过xml中配置的id拿到对象 MyBean bean = (MyBean)factory.getBean("myBean"); System.out.println(bean);
方式二:通过id与对象的Class对象拿到Bean对象(推荐使用)
//通过id与对象的class拿到Bean对象 MyBean bean = factory.getBean("myBean",MyBean.class); System.out.println(bean);
4.2.4.ApplicationContext与BeanFactory的区别【掌握】
联系:
1.ApplicationContext是BeanFactory的子类,拥有更多的功能与方法;
区别:
1.ApplicationContext默认是在读取配置文件的时候就会根据配置创建Bean对象(迫切加载)。而BeanFactory是在使用的时候才进行对象的创建(懒加载/延迟加载)
扩展:
1.我们在使用ApplicationContext的时候,可以通过配置让它也变成与BeanFactory一样的懒加载:
配置一:让所有Bean都变成懒加载,只需要在标签中加入default-lazy-init=“true”:
<beans xmlns="http://www.springframework.org/schema/beans" .... default-lazy-init="true"> <bean id="myBean" class="cn.cxjcloud._01_hello.MyBean"></bean> </beans>
配置二:让其中一个Bean变成懒加载,在标签中加入lazy-init=“true”:
<bean id="myBean" class="cn.cxjcloud._01_hello.MyBean" lazy-init="true"></bean>
5.Spring依赖注入
- IoC是一种思想,它的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的;
Spring中的对象都是由Spring进行统一管理,但是在对象中还存在属性,这些属性实际上引用的也是别的对象,那么这些对象也是由Spring来管理的;
在实际使用时,我们需要给Spring中对象的属性字段赋值,这称为依赖注入DI(Dependency Injection);
依赖注入又分为xml注入和注解注入;
5.1.xml注入
顾名思义:在xml中进行配置,但是这种方式必须有对应的setter方法,所有这种注入方式又称之为属性注入或setter方法注入;
public class MyBean{ private OtherBean otherBean; public void hello(){ otherBean.hello(); } public void setOtherBean(OtherBean otherbean){ this.OtherBean = OtherBean } } public class OtherBean{ public void hello(){ System.out.println("otherbean hello"); } } //xml配置: <bean id="otherBean" class="cn.cxjcloud.bean.OtherBean"></bean> <bean id="myBean" class="cn.cxjcloud.bean.MyBean"> <property name="otherBean" ref="otherBean"></property> </bean> //测试:main方法测试 //加载工程classpath下的配置文件实例化 String conf = "applicationContext.xml"; ApplicationContext factory = new ClassPathXmlApplicationContext(conf);
5.2.注解注入
顾名思义:通过注解实现注入,这种方式可以将注解写在setter方法上,也可以写在字段上,如果写在字段上可以不需要setter方法;
javaweb实训第五天上午——Spring基础(3)https://developer.aliyun.com/article/1415082?spm=a2c6h.13148508.setting.19.6e1a4f0eQzpjQW