1.       注入类型

a)       Spring_0300_IOC_Injection_Type

b)       setter(重要)

c)       构造方法(可以忘记)

d)      接口注入(可以忘记)

以下是setter 注入

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  6. <bean id="u" class="com.demo.dao.impl.UserDAOImpl"/>
  7. <bean id="userService" class="com.demo.service.UserService">
  8. <property name="userDAO" ref="u"/>
  9. </bean>
  10. </beans>
  1. package com.demo.service;
  2. import org.junit.Test;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. import com.demo.model.User;
  6. // Dependency Injection  依赖注入    依赖容器注入的对象 (灵活)
  7. // Inverse of Control  控制反转   原来具体的实现控制在自己手里,现在控制在容器手里
  8. public class UserServiceTest {
  9. @Test
  10. public void testAdd() throws Exception{
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  12. UserService service = (UserService)ctx.getBean("userService");
  13. User u = new User();
  14. u.setUsername("li");
  15. u.setPassword("ww");
  16. service.add(u);
  17. }
  18. }

构造方法注入

  1. public UserService(UserDAO userDAO) {
  2. super();
  3. this.userDAO = userDAO;
  4. }
  1. <constructor-arg>
  2. <ref bean="u"/>
  3. </constructor-arg>

1.       id vs. name

a)       Spring_0400_IOC_Id_Name

b)       name可以用特殊字符

<bean name="u" class="com.demo.dao.impl.UserDAOImpl"/>  把 id 改成name 原因是可以加特殊字符 (不重要)

1.       简单属性的注入(不重要)

a)       Spring_0500_IOC_SimpleProperty

b)       <property name=… value=….>

  1. <bean name="u" class="com.demo.dao.impl.UserDAOImpl">
  2. <property name="daoId" value="9"></property>
  3. <property name="daoStatus" value="helloworld"></property>
  4. </bean>

1.       <bean 中的scope属性

a)       Spring_0600_IOC_Bean_Scope

b)       singleton 单例 (默认)

c)       proptotype 每次创建新的对象

  1. UserService service = (UserService)ctx.getBean("userService");
  2. UserService service1 = (UserService)ctx.getBean("userService");
  3. System.out.println(service == service1);
  1. <bean id="userService" class="com.demo.service.UserService" scope="prototype">

1.       集合注入

a)       Spring_0700_IOC_Collections

b)       很少用,不重要!参考程序

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  6. <bean name="userDAO" class="com.demo.dao.impl.UserDAOImpl">
  7. <property name="sets">
  8. <set>
  9. <value>1</value>
  10. <value>2</value>
  11. </set>
  12. </property>
  13. <property name="lists">
  14. <list>
  15. <value>1</value>
  16. <value>2</value>
  17. <value>3</value>
  18. </list>
  19. </property>
  20. <property name="maps">
  21. <map>
  22. <entry key="1" value="1"></entry>
  23. <entry key="2" value="2"></entry>
  24. <entry key="3" value="3"></entry>
  25. <entry key="4" value="4"></entry>
  26. <entry key="5" value="5"></entry>
  27. </map>
  28. </property>
  29. </bean>
  30. <bean id="userService" class="com.demo.service.UserService">
  31. <property name="userDAO" ref="userDAO"/>
  32. </bean>
  33. </beans>

1.       自动装配

a)       Spring_0800_IOC_AutoWire

b)       byName

c)       byType

d)       如果所有的bean都用同一种,可以使用beans的属性:default-autowire

2.       生命周期

  1. <bean id="userDAO1" class="com.demo.dao.impl.UserDAOImpl">
  2. <property name="daoId" value="1"></property>
  3. </bean>
  4. <bean id="userDAO2" class="com.demo.dao.impl.UserDAOImpl">
  5. <property name="daoId" value="2"></property>
  6. </bean>
  7. <bean id="userService" class="com.demo.service.UserService" scope="prototype" autowire="byName">
  8. <property name="userDAO" ref="userDAO1"/>
  9. </bean>

1.       生命周期

a)       Spring_0900_IOC_Life_Cycle

b)       lazy-init (不重要)

c)       init-method destroy-methd 不要和prototype一起用(了解)

1.       Annotation第一步:

a)       修改xml文件,参考文档<context:annotation-config />

2.       @Autowired

a)       默认按类型by type

b)       如果想用byName,使用@Qulifier

c)       写在private field(第三种注入形式)(不建议,破坏封装)

d)       如果写在set上,@qualifier需要写在参数上

3.       @Resource(重要)

a)       加入:j2ee/common-annotations.jar

b)       默认按名称,名称找不到,按类型

c)       可以指定特定名称

d)       推荐使用

e)       不足:如果没有源码,就无法运用annotation,只能使用xml

4.       @Component @Service @Controller @Repository

a)       初始化的名字默认为类名首字母小写

b)       可以指定初始化bean的名字

5.       @Scope

6.       @PostConstruct = init-method; @PreDestroy = destroy-method;

Annotation-based configuration

context.xml  标签自动提示配置

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-2.5.xsd"

  1. <p>1.       Annotation第一步:</p><p>a)       修改xml文件,参考文档<context:annotation-config /></p><p>1.       @Autowired</p><p>a)       默认按类型by type</p><p>b)       如果想用byName,使用@Qulifier</p><p>c)       写在private field(第三种注入形式)(不建议,破坏封装)</p><p>d)       如果写在set上,@qualifier需要写在参数上</p>
  2. 在UserService 类里面
  3. @Autowired  //把和你参数和对应的类型的的bean注入进来 默认的是byName  用的不多,会产生各种问题
  4. public void setUserDAO(UserDAO userDAO) {
  5. this.userDAO = userDAO;
  6. }
  7. (@Qualifier("u")  // 可以指定 匹配那个名字的Bean 注入到参数里面来
  8. public void setUserDAO(@Qualifier("u")UserDAO userDAO) {
  9. this.userDAO = userDAO;
  10. }

1.       @Resource(重要)

a)       加入:j2ee/common-annotations.jar

b)       默认按名称,名称找不到,按类型

c)       可以指定特定名称

d)       推荐使用

e)       不足:如果没有源码,就无法运用annotation,只能使用xml

@Resource  //D:\javasoft\ssh\spring-framework-2.5.6\lib\j2ee\common-annotations.jar 包

1.       @Component @Service @Controller @Repository

a)       初始化的名字默认为类名首字母小写

b)       可以指定初始化bean的名字

2.       @Scope

3.       @PostConstruct = init-method; @PreDestroy = destroy-method;

  1. <context:component-scan base-package="com.demo"></context:component-scan>
  1. package com.demo.dao.impl;
  2. import org.springframework.stereotype.Component;
  3. import com.demo.dao.UserDAO;
  4. import com.demo.model.User;
  5. @Component("u")
  6. public class UserDAOImpl implements UserDAO {
  7. @Override
  8. public void save(User u) {
  9. System.out.println("user save");
  10. }
  11. }
  1. package com.demo.service;
  2. import javax.annotation.Resource;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.beans.factory.annotation.Qualifier;
  5. import org.springframework.stereotype.Component;
  6. import com.demo.dao.UserDAO;
  7. import com.demo.dao.impl.UserDAOImpl;
  8. import com.demo.model.User;
  9. // 面向接口或者抽象编程,需要用谁直接在service 里面new谁 实现DAO接口即可
  10. //面向抽象编程就是 灵活
  11. @Component("userService")
  12. public class UserService {
  13. private UserDAO userDAO;
  14. public void init() {
  15. System.out.println("init");
  16. }
  17. public UserDAO getUserDAO() {
  18. return userDAO;
  19. }
  20. @Resource(name="u") //常用
  21. public void setUserDAO(UserDAO userDAO) {
  22. this.userDAO = userDAO;
  23. }
  24. public void add(User u) {
  25. this.userDAO.save(u);
  26. }
  27. public void destroy() {
  28. System.out.println("destroy");
  29. }
  30. }

Spring_1300_Annotation_Pre_Post_Scope

    1. package com.demo.service;
    2. import javax.annotation.PostConstruct;
    3. import javax.annotation.PreDestroy;
    4. import javax.annotation.Resource;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.beans.factory.annotation.Qualifier;
    7. import org.springframework.stereotype.Component;
    8. import com.demo.dao.UserDAO;
    9. import com.demo.dao.impl.UserDAOImpl;
    10. import com.demo.model.User;
    11. // 面向接口或者抽象编程,需要用谁直接在service 里面new谁 实现DAO接口即可
    12. //面向抽象编程就是 灵活
    13. @Component("userService")
    14. public class UserService {
    15. private UserDAO userDAO;
    16. @PostConstruct  //构造完成之后
    17. public void init() {
    18. System.out.println("init");
    19. }
    20. public UserDAO getUserDAO() {
    21. return userDAO;
    22. }
    23. @Resource(name="u") //常用
    24. public void setUserDAO(UserDAO userDAO) {
    25. this.userDAO = userDAO;
    26. }
    27. public void add(User u) {
    28. this.userDAO.save(u);
    29. }
    30. @PreDestroy // 对象销毁之前指定这个方法
    31. public void destroy() {
    32. System.out.println("destroy");
    33. }
    34. }

Spring学习笔记(一) Spring基础IOC、AOP的更多相关文章

  1. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  2. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  3. Spring学习笔记一:基础概念

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6774310.html    一:Spring是什么 Spring的主要作用是作为对象的容器. 传统编程中,我们 ...

  4. Spring学习笔记--面向切面编程(AOP)

    什么是AOP AOP(Aspect Oriented Programming),意为面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的 ...

  5. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  6. Spring学习笔记(4)——IoC学习

    IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械式手表 ...

  7. [Spring学习笔记 5 ] Spring AOP 详解1

    知识点回顾:一.IOC容器---DI依赖注入:setter注入(属性注入)/构造子注入/字段注入(注解 )/接口注入 out Spring IOC容器的使用: A.完全使用XML文件来配置容器所要管理 ...

  8. 1.1(Spring学习笔记)Spring基础(BeanFactory、ApplicationContext 、依赖注入)

    1.准备工作 下载Spring:http://repo.spring.io/libs-release-local/org/springframework/spring/    选择需要下载的版本    ...

  9. Spring 学习笔记(二)—— IOC 容器(BeanFactory)

    使用Spring IoC容器后,容器会自动对被管理对象进行初始化并完成对象之间的依赖关系的维护,在被管理对象中无须调用Spring的API. 为了实现IoC功能,Spring提供了两个访问接口: or ...

随机推荐

  1. 用Eclipse编写运行Java程序

    1.选择一个空的文件夹,作为workspace工作空间,用来存放你以后用eclipse写的Java程序.(一个workspace可以放很多很多project项目) 2.新建java项目:File-&g ...

  2. RESTful WebService入门

    RESTful WebService入门   RESTful WebService是比基于SOAP消息的WebService简单的多的一种轻量级Web服务,RESTful WebService是没有状 ...

  3. 素数筛法--SPOJ Problem 2 Prime Generator

    质数(prime number)又称素数,除了1和它本身外,不能整除以其他自然数,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.最小的质数是2. 要判断一个整数N是不是质数很简单, ...

  4. java--面向接口编程

    之前看的一本书的笔记,上周再看设计模式的时候,想到了这篇之前在看某本书时候的笔记. 面向接口编程很重要的一点就是接口回调,用接口声明的变量称作接口变量,属于引用型变量,可以存放实现该接口的类的实例的引 ...

  5. 自定义View(4)Canvas和Paint常用绘制函数

    画布Canvas 在Android下进行2D绘图需要Canvas类的支持,它位于"android.graphics.Canvas"包下,直译过来为画布的意思,用于完成在View上的 ...

  6. C#获取一个文件的扩展名

    C#获取一个文件的扩展名System.IO.Path.GetExtension( "文件名 ");ChangeExtension   更改路径字符串的扩展名. Combine   ...

  7. Android开发之onActivityResult()中的resultCode为0,intent为null的解决办法

    BUG:昨天在使用activity之间传值的时候,遇到了一个bug,该bug为:Activity A启动Activity B,然后在Activity B中取到一个值,并通过back键返回到Activi ...

  8. Android Handler 避免内存泄漏的用法总结

    Android开发经常会用到handler,但是我们发现每次使用Handler都会出现:This Handler class should be static or leaks might occur ...

  9. Catalan数推导(转载)

    Raney引理: 设整数序列A = {Ai, i=1, 2, …, N},且部分和Sk=A1+…+Ak,序列中所有的数字的和SN=1,在A的N个循环表示中,有且仅有一个序列B,满足B的任意部分和Si均 ...

  10. bzoj1132

    每次都选最左边的点,然后以这个点为原点 统计和这个点构成的三角形面积和 不难想到极角排序然后由叉积很容易求出 shl ; eps=1e-8; var i,j,k,m,n:longint; x,y:.. ...