本章思考题:
1.请简述Spring框架的优点
2.简述什么是Spring的IOC和DI.
一.IOC?
IOC(控制反转):Spring就是一个大工厂,将所有对象的创建和依赖关系都交给Spring容器管理.
下面简要介绍IOC的"hello world"代码,按以下三步进行:
1.导入jar包 2.写配置文件(ApplicationContext.xml) 3.从spring容器中获取对象
二.DI?
DI(依赖注入):spring创建对象A时,会将对象A所依赖的对象B也创建出来,并自动注入到对象A中。
依赖:(has a) 有一个的意思,比如类A中有一个类B,那么就说A依赖B。继承,实现(is a)
下面是实例:
1.导入jar包 2.创建A类和B类 3.配置文件 4.容器中获取对象 5.结果
三.依赖注入的实现方式
构造方法注入
属性setter方法注入
普通方法
集合类
<bean id="collect" class="com.zlj.Collect"> <property name="clist"> <list> <value>zoulingjin</value> <value>20</value> </list> </property> <property name="cset"> <set> <value>xxx1</value> <value>xxx2</value> </set> </property> <property name="cmap"> <map> <entry key="z001" value="zoulingjin"></entry> <entry key="z002" value="kai"></entry> </map> </property> <property name="cproperties"> <props> <prop key="x">y</prop> <prop key="a">b</prop> <prop key="w">m</prop> </props> </property> </bean>
四.依赖Annation(注解)实现依赖注入
注解格式:@xxx
使用注解:必须对使用注解的地方进行扫描,不然注解没用。而扫描需要做两件事
1、添加名称空间,
在我们找配置文件中约束的位置那:spring-framework-3.2.0.RELEASEdocsspring-framework-referencehtmlxsd-config.html 找到context的名称空间。
2、扫描指定的目录,
注解:
1、@Component 替代 <bean id="" class=""> 可以配置任意bean,在所在类上面添加该注解即可,
@Component("userId") userId相当于bean中的id属性值
2、 这三个就跟使用@Component是一样的,但是为了更好的体现三层架构,就有了这三个注解
@Controller 修饰web层中的类。
@Service 修饰service层的类
@Repository 修饰dao层的类
两种方式,一种不声明名称,一种声明名称
@Controller("xxx") @Controller
如果声明了名称,那么在别的地方引用的话,就可以使用@Autowired或@Autowired与@Qualifier的组合 或直接使用@Resource按照名称注入
如果没有声明名称,那么在别的地方引用的话,只能使用@Autowired 来进行注入
3、属性注入
普通属性
@Value @Value("") 给普通属性注入属性值
引用属性
@Autowired 按默认类型进行注入
@Qualifier("") 按照名称注入
如果使用了@Qualifier这个注解,那么就需要两个一起使用才能生效。如果只使用@Autowired,那么写不写@Qualifier都可以
引用属性
@Resource 直接按照名称注入,与上面两个注解一起使用是等效的
@Resource(name="xxx")
4、使用
5、其他注解
@Scope("prototype") 作用域注解(spring帮我们创建的bean实例的作用域,在下面会讲解到)
@PostConstruct 修饰初始化
@PreDestory 修饰销毁
五.Bean的作用域
简要讲下singleton(单例)和prototype(原型),一般bean的scope默认值为singleton
singleton:在spring容器中永远只有一个实例,无论多少个bean引用.他始终指向同一个对象.
prototype:每次通过spring容器获取定义的bean是,都将创建一个新的Bean实例