Spring简介

1,   只用IOC

spring.jar , jarkata-commons/commons-loggin.jar

2,IOC容器

实例化具体bean

动态装配

3,AOP支持

安全检查

管理transaction

Spring配置

1,注入类型

  •   setter(重要)
  • 构造方法(可以忘记)
  •     接口注入(可以忘记)
<bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"><!-- new UserDAOImpl()--></bean><bean id="userService" class="com.bjsxt.service.UserService"><!-- <property name="userDAO" ref="u" />  setter注入 ,调用setxxx方法--><constructor-arg>  <!-- 构造方法注入,需要在UserService里面写构造方法,相当于调用了构造方法--><ref bean="u"/>   <!-- 参考了另外一个已经new 的bean--></constructor-arg></bean>

public class UserService {private UserDAO userDAO;  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;}
}

2,id vs. name

  name可以用特殊字符

<bean name="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean><bean id="userService" class="com.bjsxt.service.UserService"><!-- <property name="userDAO" ref="u" />--><constructor-arg><ref bean="u"/></constructor-arg></bean>

3,简单属性的注入

bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"><property name="daoId" value="8"></property><property name="daoStatus" value="good"></property></bean>

public class UserDAOImpl implements UserDAO {private int daoId;private String daoStatus;public int getDaoId() {return daoId;}public void setDaoId(int daoId) {this.daoId = daoId;}public String getDaoStatus() {return daoStatus;}public void setDaoStatus(String daoStatus) {this.daoStatus = daoStatus;}public void save(User user) {System.out.println("user saved!");}@Overridepublic String toString() {return this.daoId + ":" + this.daoStatus;}
}

4,bean 中的scope属性

  singleton:只有一个

  prototype:每一个都不同

5,集合注入

  很少用,不重要!

public class UserDAOImpl implements UserDAO {/* (non-Javadoc)* @see com.bjsxt.dao.UserDAO#save(com.bjsxt.model.User)*/private Set<String> sets;private List<String> lists;private Map<String , String> maps;public Set<String> getSets() {return sets;}public void setSets(Set<String> sets) {this.sets = sets;}public List<String> getLists() {return lists;}public void setLists(List<String> lists) {this.lists = lists;}public Map<String, String> getMaps() {return maps;}public void setMaps(Map<String, String> maps) {this.maps = maps;}public UserDAOImpl() {}public void save(User user) {System.out.println("user saved!");}@Overridepublic String toString() {return "sets size:" + sets.size() + "| lists size:" + lists.size() + "| maps size:" + maps.size() ; }}

<bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"><property name="sets"><set><value>1</value><value>2</value></set></property><property name="lists"><list><value>1</value><value>2</value><value>3</value></list></property><property name="maps"><map><entry key="1" value="1"></entry><entry key="2" value="2"></entry><entry key="3" value="3"></entry><entry key="4" value="4"></entry></map></property></bean><bean id="userService" class="com.bjsxt.service.UserService"><!-- <property name="userDAO"><ref bean="userDAO"/></property>--><constructor-arg><ref bean="userDAO"/></constructor-arg></bean>

6,自动装配

  • byName
  • byType
  • 如果所有的bean都用同一种,可以使用beans的属性:default-autowire
 <bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"><property name="daoId" value="1"></property></bean><bean name="userDAO2" class="com.bjsxt.dao.impl.UserDAOImpl"><property name="daoId" value="2"></property></bean><bean id="userService" class="com.bjsxt.service.UserService" scope="prototype" autowire="byName"><!-- 未指定property, 若是byname则自动匹配name等于userDAO的bean, 若是bytype则匹配类型为userDAO的bean--></bean>

public class UserDAOImpl implements UserDAO {private int daoId;public int getDaoId() {return daoId;}public void setDaoId(int daoId) {this.daoId = daoId;}public void save(User user) {System.out.println("user saved!");}@Overridepublic String toString() {return "daoId=" + daoId;}}

7,生命周期

  • lazy-init (不重要)  容器初始化时(ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml")),不初始化,只有用到时才初始化
<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

  • init-method destroy-methd 不要和prototype一起用(了解)
<bean id="userService" class="com.bjsxt.service.UserService" init-method="init" destroy-method="destroy" scope="singleton"><!-- <property name="userDAO" ref="u" />--><constructor-arg><ref bean="u"/></constructor-arg></bean>

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");}
}

8,Annotation第一步:

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

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><context:annotation-config />
<bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean><bean id="u2" class="com.bjsxt.dao.impl.UserDAOImpl"></bean><bean id="userService" class="com.bjsxt.service.UserService" ></bean></beans>

9,@Autowired(自动装配)

  • 默认按类型by type
  • 如果想用byName,使用@Qulifier
  • 写在private field(第三种注入形式)(不建议,破坏封装)
  • 如果写在set上,@qualifier需要写在参数上
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;}@Autowiredpublic void setUserDAO(@Qualifier("u") UserDAO userDAO) {this.userDAO = userDAO;}public void destroy() {System.out.println("destroy");}
}

10,@Resource(重要)

  • 加入:j2ee/common-annotations.jar
  • 默认按名称,名称找不到,按类型  @Resource
  • 可以指定特定名称  @Resource(name="u2")
  • 推荐使用
  • 不足:如果没有源码,就无法运用annotation,只能使用xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><context:annotation-config /><bean id="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"></bean><bean id="u2" class="com.bjsxt.dao.impl.UserDAOImpl"></bean><bean id="userService" class="com.bjsxt.service.UserService" ></bean></beans>

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;}@Resource(name="u2")//@Resourcepublic void setUserDAO( UserDAO userDAO) {this.userDAO = userDAO;}public void destroy() {System.out.println("destroy");}
}

11,@Component @Service @Controller @Repository  在spring2.5.6中 这四个目前没有区别

  • 初始化的名字默认为类名首字母小写
  • 可以指定初始化bean的名字 @Component("u")
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><context:annotation-config /><context:component-scan base-package="com.bjsxt"/>
</beans>

@Component("u") //u=new UserDAO()
public class UserDAOImpl implements UserDAO {public void save(User user) {System.out.println("user saved!");}}

@Component("userService")
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;}@Resource(name="u") //把name=u的UserDAO注入public void setUserDAO( UserDAO userDAO) {this.userDAO = userDAO;}public void destroy() {System.out.println("destroy");}
}

12,@Scope

13,@PostConstruct = init-method; @PreDestroy = destroy-method;

@Scope("singleton")
@Component("userService")
public class UserService {private UserDAO userDAO;  @PostConstructpublic void init() {System.out.println("init");}public void add(User user) {userDAO.save(user);}public UserDAO getUserDAO() {return userDAO;}@Resource(name="u")public void setUserDAO( UserDAO userDAO) {this.userDAO = userDAO;}@PreDestroypublic void destroy() {System.out.println("destroy");}
}

转载于:https://www.cnblogs.com/enjoy-life-clh/p/4227485.html

Spring学习笔记_IOC相关推荐

  1. 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传

    作者:ssslinppp       1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...

  2. Spring学习笔记(三) AOP_annotation,AOP_XML

    在学习课程以前,听说AOP有种很神秘的感觉,好像很好深的技术.其实原理很简单,使用动态代理的方式给程序增加逻辑.与此相似的有struts2中的filter拦截器. 再讲AOP之前先把需求说一下: 同S ...

  3. spring学习笔记06-spring整合junit(出现的问题,解决的思路)

    spring学习笔记06-spring整合junit(出现的问题,解决的思路) 文章目录 spring学习笔记06-spring整合junit(出现的问题,解决的思路) 3.1测试类中的问题和解决思路 ...

  4. spring学习笔记01-BeanFactory和ApplicationContext的区别

    spring学习笔记01-BeanFactory和ApplicationContext的区别 BeanFactory 和 ApplicationContext 的区别           BeanFa ...

  5. spring学习笔记02-spring-bean创建的细节问题

    spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式 Bean的作用范围 Bean的生命周期 <?xml version="1.0" e ...

  6. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  7. Spring学习笔记:配置单数据源

    Spring学习笔记:配置单数据源 一.Spring Boot默认数据源类型 Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfig ...

  8. Spring学习笔记:第一个Spring Boot程序HelloWorld

    Spring学习笔记:第一个Spring Boot程序HelloWorld 一.跟着 Spring 了解技术趋势 1.看看 Spring 5.x 的改变暗示了什么 2.Spring Boot 和 Sp ...

  9. Spring学习笔记之MyBatis

    系列文章目录 Spring学习笔记 之 Springhttps://blog.csdn.net/weixin_43985478/article/details/124411746?spm=1001.2 ...

最新文章

  1. Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW
  2. ​cglib实现动态代理构建带参数的代理实例
  3. python3 字符串前面加上'r'的作用
  4. WPF and Silverlight 学习笔记(十八):WPF样式(Style)与模板(Template)
  5. C++虚函数实现多态的机制
  6. 以太坊测试链环境node.js版本
  7. 【剑指offer】5.二叉树的镜像和打印
  8. Android多点触摸 与 手势识别
  9. 矩阵论10,11,12作业
  10. 安装 ActiveState Perl
  11. 完成网络传真,网络扫描。
  12. [已解决] Could not create connection to database server.
  13. 【19调剂】东北林业大学森林工程邢艳秋老师调剂信息
  14. ssm基于jsp高校选课系统毕业设计源码291627
  15. 英语语法总结--虚拟语气
  16. 华为2012实验室无线通信领域的首席专家朱佩英博士
  17. 斐讯db2_斐讯P1刷armbian变身linux小型服务器
  18. 卫星地图哪个最清晰,哪个使用最方便? 附赠全套可用图源
  19. 互联网日报 | 7月16日 星期五 | 美团打车宣布新司机7天免佣;小米手机销量超苹果首次居全球第二;北大成立集成电路学院...
  20. “80后”的二代身份证该换了!

热门文章

  1. 本地打包Docker镜像上传至阿里云远程仓库(一站式脚本)
  2. 基于Golang的对象序列化的程序包开发——myJsonMarshal
  3. 2022-2028年中国钢轨探伤车行业市场研究及前瞻分析报告
  4. liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL
  5. 2022-2028年中国复合软管行业市场行情动态及发展趋向分析报告
  6. CentOS 6.5 下配置Java环境
  7. 【微服务架构】SpringCloud之Eureka入门篇
  8. tableau问题汇总
  9. jieba分词流程及部分源码解读(一)
  10. 单步调试 step into/step out/step over 区别