Spring中的bean管理
来源:互联网 发布:淘宝口令在什么位置 编辑:程序博客网 时间:2024/06/06 08:29
一.配置文件没有提示问题
- spring引入schema约束,把约束文件引入到eclipse中
- 复制约束路径
二.Spring的bean管理(xml)
1.bean实例化的方式
(1).在spring里面通过配置文件创建对象
(2).bean实例化三种方式实现
- 第一种 使用类的无参数构造创建(重点)
类里面没有无参数的构造,出现异常
第二种 使用静态工厂创建
- 创建静态的方法,返回类对象
<bean id="User1" class="cn.st.web.factory.UserFactory" factory-method="getUser"> </bean>
public class UserFactory { //静态方法,返回User对象 public static User getUser() { return new User(); }}
public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User) context.getBean("User1"); System.out.println(user); user.add(); }
- 第三种 使用实例工厂创建
- 创建不是静态的方法,返回类对象
public class UserFactory2 { public User getUser2() { return new User(); }}
<bean id="UserFactory2" class="cn.st.web.factory.UserFactory2"></bean> <bean id="User2" factory-bean="UserFactory2" factory-method="getUser2"></bean>
public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User) context.getBean("User2"); System.out.println(user); user.add(); }
2.bean标签常用属性
(1).id属性:起名称,id属性值名称任意命名
- id属性值,不能包含特殊符号(比如#等)
- 根据id值得到配置对象
(2).class属性:创建对象所在类的全路径
(3).name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号
(4).scope属性
- singleton:默认值,单例
<bean id="User" class="cn.st.web.entity.User" scope="singleton"> </bean>
public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User) context.getBean("User"); User user1=(User) context.getBean("User"); System.out.println(user); System.out.println(user1); }
- prototype:多例,与structs里面的action相似,action也是多实例
<bean id="User" class="cn.st.web.entity.User" scope="prototype"> </bean>
public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User) context.getBean("User"); User user1=(User) context.getBean("User"); System.out.println(user); System.out.println(user1); }
- request:创建对象把对象放到request域里面
- session:创建对象把对象放到session域里面
- globalSession:创建对象把对象放到globalSession里面
3.属性注入
(1).创建对象时候,向类里面属性里面设置值
(2).属性注入的方式介绍(三种)
- 使用set方法注入
- 使用有参数构造注入
- 使用接口注入
(3).在spring框架里面,只支持前两种方式
- set方法注入
- 有参数构造注入
A.使用有参数构造注入属性
<!-- 使用有参数的构造方式传值 --> <bean id="demo1" class="cn.st.web.factory.PropertyDemo1"> <constructor-arg name="username" value="小王"></constructor-arg> </bean>
public class PropertyDemo1 { private String username; public PropertyDemo1(String username) { this.username=username; } public void test1() { System.out.println("..."+username); }}
public class SpringDemo { @Test public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); PropertyDemo1 propertyDemo1=(PropertyDemo1)context.getBean("demo1"); propertyDemo1.test1(); }}
...小王
B.使用set方法注入属性(重点)
<!-- 使用set方式注入值 --> <bean id="book" class="cn.st.web.entity.Book"> <property name="bookname" value="易筋经"></property> </bean>
public class Book { private String bookname; public void setBookname(String bookname) { this.bookname = bookname; } public void test() { System.out.println(bookname); }}
public class SpringDemo { @Test public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); Book book=(Book)context.getBean("book"); book.test(); }}
易筋经
4.注入对象类型属性(重点)
(1).创建service类和dao类
- 在service得到dao对象
(2).具体实现过程
- 在service里面把dao作为类型属性
- 生成dao类型属性的set方法
public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; }}
(3).配置文件中完成
5.P名称空间注入
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"<!--这一行--> xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="cn.st.web.entity.Person" p:pname="lucy"> </bean>
public class Person { private String pname; public void setPname(String pname) { this.pname = pname; } public void test() { System.out.println(pname); }}
public class SpringDemo { @Test public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); Person person=(Person)context.getBean("person"); person.test(); }}
lucy
6.注入复杂类型属性
- 数组
- list集合
- map集合
- properties类型
<bean id="person" class="cn.st.web.entity.Person"> <!-- 数组 --> <property name="arrs"> <list> <value>小王</value> <value>小马</value> <value>小唐</value> </list> </property> <!-- list --> <property name="list"> <list> <value>小金</value> <value>小智</value> <value>小红</value> </list> </property> <!-- map --> <property name="map"> <map> <entry key="aa" value="lucy"></entry> <entry key="bb" value="tom"></entry> <entry key="cc" value="mary"></entry> </map> </property> <!-- properties --> <property name="properties"> <props> <prop key="driverClass">com.mysql.jdbc.Driver</prop> <prop key="username">root</prop> <prop key="password">T471912619</prop> </props> </property> </bean>
public class Person { private String [] arrs; private List<String> list; private Map<String, String> map; private Properties properties; public void setArrs(String[] arrs) { this.arrs = arrs; } public void setList(List<String> list) { this.list = list; } public void setMap(Map<String, String> map) { this.map = map; } public void setProperties(Properties properties) { this.properties = properties; } public void fun1() { System.out.println(Arrays.toString(arrs)); System.out.println(list); System.out.println(map); System.out.println(properties); }}
public class SpringDemo { @Test public void fun1() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); Person person=(Person)context.getBean("person"); person.fun1();; }}
[小王, 小马, 小唐][小金, 小智, 小红]{aa=lucy, bb=tom, cc=mary}{driverClass=com.mysql.jdbc.Driver, password=T471912619, username=root}
三.IOC和DI区别
- IOC:控制反转,把对象创建交给spring进行配置
DI:依赖注入,向类里面的属性中设置值
关系:依赖注入不能单独存在,需要在ioc基础之上完成操作
四.Spring整合web项目原理
1.加载spring核心配置文件
new对象,功能可以实现,但是效率很低
- 实现思想:把加载配置文件和创建对象过程,在服务器启动时候完成
2.实现原理
- ServletContext对象
- 监听器
- 具体使用
- 在服务器启动时候,为每个项目创建一个ServletContext对象
- 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
- 使用监听器监听到ServletContext对象创建时候
- 加载spring配置文件,把配置文件配置对象创建
- 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
- 获取对象时候,到ServletContext域得到(getAttribute方法)
阅读全文
1 0
- Spring中的bean管理
- Spring动态管理IoC容器中的Bean
- 管理Spring容器中的自定义Bean
- Spring Bean基本管理
- Spring 管理Bean
- spring管理bean原理
- spring管理bean生命周期
- spring的bean管理
- Spring Bean基本管理
- spring bean 管理
- Spring-管理bean
- 使用Spring管理Bean
- Spring bean 生命周期管理
- spring管理bean生命周期
- spring Bean管理
- Spring的bean管理
- Spring Bean 生命周期管理
- spring的bean管理
- bzoj1495 [NOI2006] 网络收费 树形DP
- 子串
- 切割网线
- 子串
- 如何转载csdn文章
- Spring中的bean管理
- Implement strStr()
- Java_Ant详解
- Android MediaProjection 录屏
- Java源码集合类TreeMap学习2
- 38. Count and Say
- SpringMVC集成Redis缓存配置
- |BZOJ 1654|强连通分量|[Usaco2006 Jan]The Cow Prom 奶牛舞会
- mysql之 mysql 5.6不停机双主一从搭建(活跃双主一从基于日志点复制)