1、在maven中使用spring,直接接入依赖正常使用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<!--log4j的日志文件-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
Sprint 实例化Bean:在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象。在 Spring 中,实例化 Bean 有三种方式,分别是构造器实例化、静态工厂方式实例化和实例工厂方式实例化。
2、通过实例工厂来实例化类
在Facoty实例化类时没加static,并且使用User里的有参构造方法
public User createFactory(){
return new User("阿呆","adai");
}
则在application-config 中:
<bean id="UserFactory" class="cn.edu.hcnu.factory.CreateFactory"></bean>
<bean id="user" factory-bean="UserFactory" factory-method="createFactory"></bean>
如果在用的是无参构造方法,则Factory为:
public class CreateFactory {
public CreateFactory(){
System.out.println("这是实例工厂的无参构造方法");
}
public User createFactory(){
return new User();
}
}
在application-config 中:
<bean id="user" factory-bean="UserFactory" factory-method="createFactory">
<property name="name" value="阿呆"></property>
<property name="password" value="adai"></property>
</bean>
由上述代码运行结果可知,实例工厂的构造方法在User类的狗仔方法前被执行
3、静态工厂实例化
在Facory中加了static
<bean id="user" class="cn.edu.hcnu.factory.CreateFactory" factory-method="createFactory"></bean>
4、构造器实例化Bean(注意:要在User中加入get、set方法)
<bean id="user" class="cn.edu.hcnu.entity.User">
<property name="name" value="阿呆"></property>
<property name="password" value="adai"></property>
</bean>
5、Bean的别名
在application中:
<bean id="UserFactory" class="cn.edu.hcnu.factory.CreateFactory"></bean>
<bean id="user" factory-bean="UserFactory" factory-method="createFactory">
<property name="name" value="阿呆"></property>
<property name="password" value="adai"></property>
</bean>
<alias name="user" alias="usera"></alias>
<alias name="user" alias="userb"></alias>
在TestUser 中像使用user一样使用usera和userb,效果一样
6、Bean的作用域
Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring3 为 Bean 定义了五种作用域,具体如下。
6.1、singleton(容器共享一个Bean实例)
单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域。
在application中:
<bean name="user" class="cn.edu.hcnu.entity.User" scope="singleton"></bean>
在TestUser中:
public static void main(String[] args) {
String xmlPath = "application-config.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
User user = (User)context.getBean("user");
User user1 = (User)context.getBean("user");
//对user的属性值进行设置
user.setName("阿呆");
user.setPassword("adai");
//用user1在没设置值之前调用sayHello()方法,如果有数据,则说明user和user1共享Bean,
//没有数据,则说明结论错误
user1.sayHello();
}
6.2、prototype
原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例。
在application中:
<bean name="user" class="cn.edu.hcnu.entity.User" scope="prototype">
<property name="name" value="阿呆"></property>
<property name="password" value="adai"></property>
</bean>
在TestUser中:
public static void main(String[] args) {
String xmlPath = "application-config.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
User user = (User)context.getBean("user");
User user1 = (User)context.getBean("user");
//对user的属性值进行设置
user.setName("李四");
user.setPassword("lisi");
//分别调用看两个的值是否一样
user.sayHello();
user1.sayHello();
}
6.3、request
在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效。
6.4、session
在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效。
6.5、global Session
在一个全局的 HTTP Session 中,容器会返回该 Bean 的同一个实例。该作用域仅在使用 portlet context 时有效
7、基于xml配置Bean(在User中必须要有get、set方法)
在application-config中
<bean name="usera" class="cn.edu.hcnu.entity.User">
<property name="name" value="阿呆"></property>
<property name="password" value="adai"></property>
</bean>
<bean name="userb" class="cn.edu.hcnu.entity.User">
<constructor-arg index="0" value="李四"></constructor-arg>
<constructor-arg index="1" value="lisi"></constructor-arg>
</bean>
在TestUser中:
public static void main(String[] args) {
String xmlPath = "application-config.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
User user = (User)context.getBean("usera");
User user1 = (User)context.getBean("userb");
System.out.println(user);
System.out.println(user1);
}
8、基于Annotation(注解)配置Bean:(略)
9、自动装配Bean(略)