层次划分
面向抽象编程 带来极大的灵活性
IOC(DI) 依赖注入
控制反转:
正式使用spring
IOC 控制反转 不用自己写实现 由容器完成
建议使用appicatiioncontext
DI:
SET注入就是调用set方法
2.构造方法注入、
id,name
Id和name可以互换 唯一的区别是name可以含有特殊字符
简单属性的注入
简单属性的值可以在配置文件里指定
bean的生命范围
默认singleton 拿多少个都一样
prototype 原型 每一次都造一个新的出来
集合注入:
自动专配
autowire = 默认是no
<bean id="userService" class="com.bjsxt.service.UserService" scope="prototype" autowire="byType">
不用制定了 根据id的类型来寻找 也可以设置成byname
可以在beans里设置defaul-autowire的值 然后在下面的bean就可以设置default使跟beans里设置成的值一样
生命周期
lazy-init 可以设置为true 并不初始化 只是到get的时候才初始化 beans里可以为全部设置
<bean id="userService" class="com.bjsxt.service.UserService" init-method="init" destroy-method="destroy" scope="prototype">
<!--
<property name="userDAO" ref="u" />
-->
<constructor-arg>
<ref bean="u"/>
</constructor-arg>
</bean>
Userservice.java
package com.bjsxt.service;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User; public class UserService { private UserDAO userDAO; public void init() {
System.out.println("init");
} public void add(User user) {
userDAO.save(user);
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
} public UserService(UserDAO userDAO) {
super();
this.userDAO = userDAO;
} public void destroy() {
System.out.println("destroy");
}
}
如果不设置scope = protytype 的话 只会执行一次开始和结束方法
如果设置 只会每次执行开始方法