Spring 的IOC 和Aop
在ApplicationContext.xml中,bean的scope属性默认是singleton,即默认是单例
Spring容器创建的时候,会将所有的配置的bean对象创建,默认bean都是单例的,
代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构造器,创建实例对象
bean的作用域
scope=“prototype” 原型模型(N个对象),真正使用时才会创建,没获取一次,都会创建不同的对象
scopr="singleton" 单例模式:容器初始化时就会初始化所有的bean对象,,每次获取的都是同一个对象,默认值
多种方式实现依赖注入
设置注入
<bean id="user3" class="cn.hmy.bean.User"> <property name="username "> <value><![CDATA[P&g]]></value> </property> </bean>
构造注入
注意:
1、一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。
2、通过<constructor-arg>元素的index 属性可以指定该参数的位置索引,位置从0 开始。
3、<constructor-arg>元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
<bean id="user" class="cn.hmy.bean.User" scope="prototype"> <constructor-arg index="0" type="java.lang.String" value="lxl"/> <constructor-arg index="1" type="java.lang.String" value="[email protected]"/> <constructor-arg index="2" type="cn.hmy.bean.Car" ref="car"></constructor-arg> </bean>
p命名空间注入
xmlns:p="http://www.springframework.org/schema/p"....<!--p命名空间注入 --> <bean id="user2" class="cn.hmy.bean.User" p:username="张嘎" p:password="123"/>
c命名空间的注入
xmlns:c="http://www.springframework.org/schema/c" <!--c命名空间注入 --> <bean id="user5" class="cn.hmy.bean.User" c:car-ref="car" c:username="岁月静好" c:password="123"/>
引用其他bean组件
<!--引用其他的Bean组件 即给域属性的赋值--> <bean id="car" class="cn.hmy.bean.Car"> <property name="color" value="白色"/> </bean> <bean id="user4" class="cn.hmy.bean.User"> <property name="car" ref="car"/> </bean>
注入不同数据类型
<!-- 注入集合类型的属性 --> <!-- 注入list类型的属性 --> <bean id="collectionBean1" class="cn.hmy.bean.CollectionBean"> <property name="names"> <list> <value>张三</value> <value>李四</value> </list> </property> </bean> <!--注入set类型的属性 --> <bean id="collectionBean2" class="cn.hmy.bean.CollectionBean"> <property name="address"> <set> <value>张三2</value> <value>李四2</value> </set> </property> </bean> <!--注入map类型的属性 --> <bean id="collectionBean4" class="cn.hmy.bean.CollectionBean"> <property name="map"> <map> <entry> <key><value>football</value></key> <value>足球</value> </entry> </map> </property> </bean> <!--注入properties类型的属性 --> <bean id="collectionBean5" class="cn.hmy.bean.CollectionBean"> <property name="pro"> <props> <prop key="basketball">篮球</prop> </props> </property> </bean> <!--给数组注入值 --> <bean id="collectionBean6" class="cn.hmy.bean.CollectionBean"> <property name="strs"> <list> <value>神奇</value> <value>神奇</value> <value>神奇</value> </list> </property> </bean>
使用注解实现注入
package cn.hmy.bean; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; //@Component("info") 不分层 //@Repository("info") dao //@Controller("info") action @Service("info") // biz public class User { @Value("岁月静好") //普通属性 private String username; // 用户名 @Value("123") private String age; // 密码 //@Resource 域属性 @Autowired //域属性 private Car myCar; public Car getMyCar() { return myCar; } @Override public String toString() { return "User [username=" + username + ", age=" + age + ", myCar=" + myCar + "]"; } public void setMyCar(Car myCar) { this.myCar = myCar; } public User() { System.out.println("init user"); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <context:component-scan base-package="cn.hmy.bean"/> </beans>
package cn.hmy.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class Car { @Value("白色") private String color; public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override public String toString() { return "Car [color=" + color + "]"; } }
时间: 2024-10-06 22:28:39