IOC/DI
内部bean
<bean id="emp">
<property name="ename" value"lucy"></property>
<property name="depe">
<bean id="dept" class="">
<property name="dname" vlaue"jfeoi"></property>
</bean>
</property>
</bean>
级联赋值
<bean id="emp">
<property name="ename" value"lucy"></property>
<property name="depe" ref="dept"></property>
</bean>
<bean id="dept" class="">
<property name="dname" vlaue"jfeoi"></property>
</bean>
<bean id="emp">
<property name="ename" value"lucy"></property>
<property name="depe" ref="dept"></property>
dept get方法要出来
<property name="dept.dname" value="技术部"></property>
</bean>
注入数组
<bean id="stu" class="">
<porperty name="course">
<array>
<value>aa</value>
<value>bb</value>
</array>
</porperty>
<property name="list">
<list>
<value>张三</value>
<value>小三</value>
</list>
</property>
<property name="maps">
<map>
<entry key="java" value="java"></entry>
</map>
</property>
<property name="sets">
<set>
<value>jdsiof</value>
</set>
</property>
</bean>
public void test(){
ApplicationContext context = ClassPathXmlApplicationContext();
....
System.....
}
在集合中设置对象类型值
<bean id="stu" class="">
<porperty name="courseList">
<list>
<ref bean="course1"></ref>
<ref bean="course2"></ref>
</list>
</porperty>
</bean>
<bean id="course1" class="">
......
</bean>
<bean id="course2" class="">
......
</bean>
有两种类型bean 一种是普通bean, 另一种工厂bean
普通bean,定义的类型就是返回类型
工厂bean,定义的类型可以和返回类型不一样
public class MyBean implements FactoryBean<Course>
{
@Override
}
<bean id="factorybean" class="Course">
</bean>
默认单实例对象
可以设置成多实例
scope属性配置
默认值, singleton单实例对象,加载配置文件 的时候
prototype多实例对象,获取对象的时候创建 创建时机不同
还有request
session
bean的生命周期
1.通过构造器创建bean实例(无参构造)
2.为bean的属性这只值(调用set方法)
把bean实例传递bean后置处理器的方法
3.调用bean初始化方法(需要进行配置) (init-method=“initMethod()”)
把bean实例传递bean后置处理器的方法
4.当关闭容器时,调用bean的销毁方法(需要进行配置销毁的方法);(destroy-method=“destroyMethod()”);
bean的后置处理器,有6步
配置后置处理器
<bean id="myBeanPost" class="..."></bean>
都添加了后置处理器
xml自动装配
什么时自动装配
根据指定装配规则,Spring自动蒋匹配属性进行注入
byName
注入bean的id的值和属性名称一样
byType
根据类型装配,不能定义相同类型定义多个。
<bean id="emp" class=".." autowire="byName">
<!-- <property name="dept" ref="dept"></property>-->
</bean>
<bean id="dept" class="..."></bean>
IOC操作bean管理(外部属性文件)
1、直接配置数据库信息
配置德鲁伊连接池
引入德鲁伊连接池jar包
引入文件
引入context命名空间
<bean id="dataSource" class="">
<property name="driverClassName" value="${prop.driverClass}"></property>
<property name="url" value="..."></property>
<property name="username" value="..."></property>
<property name="password" value="..."></property>
</bean>
引入外部属性问价
<context:property-placeholder location="classpath:jdbc.properties">
</context:property-placeholder>
注解方式注入属性
@Component 表示普通注解
@Service service层
@Controller web层
@Repository dao层
功能时一样的,都可以用来创建对象
基于注解方式,对象的创建
引入依赖
aop依赖
开启组件扫描
- 引入名称空间context
<context:component-scan base-packate="com.atauigu.spring5,com.atguigu">
<context:include
</context:component-scan>
引用多个包,可以用逗号
或者扫描上层目录
<context:component-scan base-packate="com.atauigu.spring5,com.atguigu" use-default-filter="false">
那些内容进行扫描
<context:include-filter type="annotation" expression="....controller">
</context:include-filter>
</context:component-scan>
//注解中的名字可以不写,默认是首字母小写
@Component(value = "userService")
或者@Service
@Repository
public class userService{
public void add()
{
System.out.println("jafiew");
}
}
注解属性注入
@AutoWired 根据属性类型进行自动注入
@Qualifier 根据属性名称注入
和@Autowired一起使用
@Resource 都可以
@Value: 注入普通类型属性
public interface UserDao{
}
@Reposity(value = "aaa")
public class UserDaoImpl implements userDao
{
}
@Service
public class UserService
{
@Autowired
@Qualified("aaa")
private UserDao userDao;
public void add()
{
System.out.println("service add....")
}
}
配置类
@Configuration
@ComponentScan(basePackages = {"com...."})
public class SpringCConfig{
}
测试类
@Test
public void test(){
ApplicationContext a = new AnnotationConfigApplicationContext(SpringConfig.class);
}