Spring3.0学习1.1(模拟spring)

时间:2022-01-20 00:23:36

层次划分

Spring3.0学习1.1(模拟spring)

面向抽象编程  带来极大的灵活性

IOC(DI)  依赖注入

控制反转:

正式使用spring

IOC   控制反转 不用自己写实现 由容器完成

建议使用appicatiioncontext

DI:

SET注入就是调用set方法

2.构造方法注入、

Spring3.0学习1.1(模拟spring)

Spring3.0学习1.1(模拟spring)

id,name

Spring3.0学习1.1(模拟spring)

Id和name可以互换 唯一的区别是name可以含有特殊字符

简单属性的注入

简单属性的值可以在配置文件里指定

bean的生命范围

Spring3.0学习1.1(模拟spring)

默认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 的话 只会执行一次开始和结束方法

如果设置 只会每次执行开始方法