通过Spring基础入门篇一,我们对Spring有了一定的了解,本篇重点讲述Spring是如何创建对象并将对象进行依赖注入的几种形式.
Spring创建bean对象的方法有三种:
1:构造函数创建对象:
①在application.xml中输入:
<!--id相当于定义的类名, class相当于将要交给Spring管理的类的路径 -->
<bean id="helloWorld" class="com.zdj.create.HelloWorld"></bean>
②创建HelloWorld类
public class HelloWorld {
public HelloWorld() {
System.out.println("这里的值是???---HelloWorld");
}
}
③在主方法中输入
//第一种通过构造器构建
ApplicationContext context = new ClassPathXmlApplicationContext("Application.xml");
//根据id把spring容器中的bean提取出来了
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
2:通过静态工厂方式
①:在application.xml中创建bean对象
<!--告诉Spring容器:我在com.zdj.四月二十八号.testSpringTwo下创建了一个静态方法getStaticInstance -->
<bean id="StaticFactoryMethod" class="com.zdj.create.StaticFactory" factory-method="getStaticInstance"></bean>
②:创建一个含有该方法名的静态工厂
public class StaticFactory {
public static StaticFactory getStaticInstance() {
System.out.println("这里是通过创建了一个静态工场,返回一个对象");
return new StaticFactory();
}
}
③:在测试方法中调用该静态方法
//第二种通过静态工厂方式创建bean对象
ApplicationContext staticFactorycontext = new ClassPathXmlApplicationContext("Application.xml");
//根据id把spring容器中的bean提取出来了
StaticFactory staticFactory = (StaticFactory)context.getBean("StaticFactoryMethod");
staticFactory.getStaticInstance();
3:通过实例工厂方法形式
①:现在application.xml中定义一个实例工厂
<!--这是第三种通过使用实例工厂方法 -->
<bean id="InstanceFactory" class="com.zdj.create.InstanceFactory"></bean>
<bean id="getInstanceFactory" factory-bean="InstanceFactory" factory-method="getInstanceFactory"></bean>
②:创建一个实例工厂类
/*通过实例工厂方法创建bean*/
public class InstanceFactory {
public InstanceFactory getInstance(){
System.out.println("这里使用的是实例工厂方法");
return new InstanceFactory();
}
}
③:在测试方法中进行测试
//第三种:通过实例工厂方法
ApplicationContext InstanceFactory=new ClassPathXmlApplicationContext("Application.xml");
InstanceFactory getInstance=(InstanceFactory)InstanceFactory.getBean("getInstanceFactory");
getInstance.getInstance();
概述一下以上三种生成bean对象的方法:第一种是构造器被定义为一个bean对象,第二种是一个静态方法被定义为一个bean对象,第三种是一个普通方法被定义为一个bean对象。
Spring的依赖注入有三种形式:
1:第一种形式是基于XML注解定义
<bean id="student" class="test.Student">
<property name="name" value="张三"/>
<property name="teacher" ref="teacher"/>//在这里引入下面定义的teacher属性
</bean>
<bean id="teacher" class="test.Teacher">
<property name="name" value="李四"/>
</bean>
当被执行的的时候,就能通过bean的id获取到这里定义的信息啦!
2:第二种是基于注解的Bean定义
Spring在此提供了四种注解,这些注解与上面的XML定义的bean效果一样,在于将组件交给bean管理。
@Component:当对组件的层次难以定位的时候使用这个注解
@Controller:表示控制层的组件
@Service:表示业务逻辑层的组件
@Repository:表示数据访问层的组件
applicationContext.xml中声明<contex:component-scan...>一项,指明Spring容器扫描组件的包目录。
①通过在model类上面配置注解:
@Component("teacher")
public class Teacher {
@Value("李四")
private String name;
public String getName() {
return name;
}
}
②:在application.xml中配置扫描
<!--扫描组件的包目录-->
<context:component-scan base-package="test"/>
③:在测试方法中进行配置测试即可
3:根据set方法,将依赖类输入进来
①:配置好Teacher、Stdents上添加@Bean
在方法中将set方法里面注入相应实例,并返回
②:在测试方法中将引用该类结果输出
本文章参考自:https://blog.csdn.net/sinat_34596644/article/details/53080026<!--里面有相应的配置-->