标签:应用 spring list 三种方式 ESS 文件 -- set 需要
取值范围 | 说明 |
---|---|
singleton | 这是默认值,单例 |
prototype | 多例 |
request | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 |
session | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 |
gloable session | WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于 session |
Bean的实例化个数:1
Bean的实例化时机:当Spring的核心文件被加载的时候
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Bean的生命周期:
Bean的实例化个数:多个,每次进行调用getBean的时候,都会实例化新的对象
Bean的实例化时机:调用getBean的时候
Object userService = applicationContext.getBean("userService");
Bean的生命周期
有三种方式:无参构造方法实例化,工厂静态方法实例化,工厂实例方法实例化
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl"/>
这样就可以利用UserDao userDao = (UserDao)applicationContext.getBean(“userDao”);获得UserDao的对象了。
既然是工厂方法,肯定要先构造一个工厂放到spring容器中
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="userDao" class="xqp.factory.StaticFactoryBean"
factory-method="createUserDao" />
其中factory-method是用来指向具体的方法的,这里因为是静态的,因此通过getBean()方法后会或的对应的class的属性,进而得到对应的类(不是类的对象),最后在根据factory-method方法来表明这个类应该调用那个方法来返回所需要的对象
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="factoryBean" class="xqp.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
依赖注入式Spring框架核心IOC的具体实现。在编写程序的时候,由于IOC的存在,对象的创建权被交给了Spring,但是代码中不可能出现没有依赖的情况,IOC的存在也只是降低了耦合而不是消灭了耦合。
构造方法注入(引用类型数据的注入为例)
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl"/>
<bean id="userService" class="xqp.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
set方法注入,引用类型数据的注入为例,如果是用的是xml方式的话set方法不能省略,但是如果使用的是注解方式,那么set方法可以省略)
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl"/>
<bean id="userService" class="xqp.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
如果使用set方法注入,并且注入数据少的话可以使用p命名空间注入(就是简化了而已)。 P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:
首先,需要引入P命名空间:
xmlns:p="http://www.springframework.org/schema/p"
其次,需要修改注入方式:
<bean id="userService" class="xqp.service.impl.UserServiceImpl" p:userDao-ref="userDao"/>
普通数据类型
public class UserDaoImpl implements UserDao {
private String company;
private int age;
public void setCompany(String company) {
this.company = company;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void save() {
System.out.println(company+"==="+age);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl">
<property name="company" value="大疆"></property>
<property name="age" value="15"></property>
</bean>
引用数据类型
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl"/>
<bean id="userService" class="xqp.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
集合数据类型
List<普通数据类型>
public class UserDaoImpl implements UserDao {
private List<String> strList;
public void setStrList(List<String> strList) {
this.strList = strList;
}
@Override
public void save() {
System.out.println(strList);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
List<引用数据类型>
public class UserDaoImpl implements UserDao {
private List<User> userList;
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public void save() {
System.out.println(userList);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl">
<property name="userList">
<list>
<!--进行引用类型的注入-->
<bean class="xqp.domain.User" ref="user1"/>
<bean class="xqp.domain.User" ref="user2"/>
</list>
</property>
</bean>
<bean id="user1" class="xqp.domain.User">
<!--User里面也有属性,因此也需要一块进行注入-->
<property name="name" value="Tom"></property>
<property name="addr" value="beijing"></property>
</bean>
<bean id="user2" class="xqp.domain.User">
<!--User里面也有属性,因此也需要一块进行注入-->
<property name="name" value="Lucy"></property>
<property name="addr" value="tianjing"></property>
</bean>
Map
<bean id="user1" class="xqp.domain.User">
<!--User里面也有属性,因此也需要一块进行注入-->
<property name="name" value="Tom"></property>
<property name="addr" value="beijing"></property>
</bean>
<bean id="user2" class="xqp.domain.User">
<!--User里面也有属性,因此也需要一块进行注入-->
<property name="name" value="Lucy"></property>
<property name="addr" value="tianjing"></property>
</bean>
<property name="userMap">
<map>
<!--这个key代表的map的key,叫啥都行,无所谓-->
<!--ref指向的是要注入的Bean,是要引用容器当中的Bean的id-->
<entry key="aaaa" value-ref="user1"></entry>
<entry key="bbbb" value-ref="user2"></entry>
</map>
</property>
Properties
public class UserDaoImpl implements UserDao {
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public void save() {
System.out.println(properties);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="xqp.dao.impl.UserDaoImpl">
<property name="properties">
<props>
<prop key="p1">aaa</prop>
<prop key="p2">bbb</prop>
<prop key="p3">ccc</prop>
</props>
</property>
</bean>
标签:应用 spring list 三种方式 ESS 文件 -- set 需要
原文地址:https://www.cnblogs.com/xiaoqingnianXQP/p/14206400.html