spring 学习1

1. spring is lightweight= minimal impact

2. Spring DI= JavaBeans +interfaces

3.JSR-330=Dependency Injection for Java

4.JSR-303= Bean Validation API specification 

5.

Java代码  

  1. props = new Properties();  
  2. props.load(new FileInputStream(“ch2/src/conf/msf.properties”));  
  3. String rendererClass = props.getProperty(“renderer.class”);   

 6.Injection vs. Lookup 

7.<context:annotation-config>tag tells Spring to scan the codebase for dependency requirements.because of <context:annotation-config>tag,during the initialization of Spring’s ApplicationContext, Spring will discover those @Autowired annotations and inject the dependency (discovered via the <context:component-scan>tag) as required.

8.

@Value("John Smith") 

private String name; 

9.SpringEL

Java代码  

  1. public class InjectSimpleConfig {   
  2. private String name = "John Smith";   
  3. private int age = 35;   
  4. private float height = 1.78f;   
  5. private boolean programmer = true;   
  6. private Long ageInSeconds = 1103760000L;   
  7. // Getter/setter method omitted   
  8. }   

 

Xml代码  

  1. <bean id="injectSimpleConfig" class="com.apress.prospring3.ch4.xml.InjectSimpleConfig"/>   
  2. <bean id="injectSimpleSpel" class="com.apress.prospring3.ch4.xml.InjectSimpleSpel">   
  3. <property name="name">   
  4. <value>#{injectSimpleConfig.name}</value>   
  5. </property>   
  6. <property name="age">   
  7. <value>#{injectSimpleConfig.age + 1}</value>   
  8. </property>   
  9. <property name="height">   
  10. <value>#{injectSimpleConfig.height}</value>   
  11. </property>   
  12. <property name="isProgrammer">   
  13. <value>#{injectSimpleConfig.programmer}</value>   
  14. </property>   
  15. <property name="ageInSeconds">   
  16. <value>#{injectSimpleConfig.ageInSeconds}</value>   
  17. </property>   
  18. </bean>   

 

Java代码  

  1. @Service("injectSimpleSpel")   
  2. public class InjectSimpleSpel {   
  3. @Value("#{injectSimpleConfig.name}")   
  4. private String name;   
  5. @Value("#{injectSimpleConfig.age + 1}")   
  6. private int age;   
  7. @Value("#{injectSimpleConfig.height}")   
  8. private float height;   
  9. @Value("#{injectSimpleConfig.programmer}")   
  10. private boolean programmer;   
  11. @Value("#{injectSimpleConfig.ageInSeconds}")   
  12. private Long ageInSeconds;   
  13. // Other codes omitted   
  14. }   

 10.Using Collections for Injection

Java代码  

  1. public class CollectionInjection {   
  2. private Map<String, Object> map;   
  3. private Properties props;   
  4. private Set set;   
  5. private List list;   
  6. public static void main(String[] args) {   
  7. GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();   
  8. ctx.load("classpath:app-context-xml.xml");   
  9. ctx.refresh();   
  10. CollectionInjection instance = (CollectionInjection) ctx.getBean("injectCollection");   
  11. instance.displayInfo();   
  12. }   
  13. public void setList(List list) {   
  14. this.list = list;   
  15. }   
  16. public void setSet(Set set) {   
  17. this.set = set;   
  18. }   
  19. public void setMap(Map <String, Object> map) {   
  20. this.map = map;   
  21. }   
  22. public void setProps(Properties props) {   
  23. this.props = props;   
  24. }   
  25. public void displayInfo() {   
  26. // display the Map   
  27. System.out.println("Map contents:\n");   
  28. for (Map.Entry<String, Object> entry: map.entrySet()) {   
  29. System.out.println("Key: " + entry.getKey() + " - Value: " + entry.getValue());   
  30. }   
  31. // display the properties   
  32. System.out.println("\nProperties contents:\n");   
  33. for (Map.Entry<Object, Object> entry: props.entrySet()) {   
  34. System.out.println("Key: " + entry.getKey() + " - Value: " + entry.getValue());   
  35. }   
  36. // display the set   
  37. System.out.println("\nSet contents:\n");   
  38. for (Object obj: set) {   
  39. System.out.println("Value: " + obj);   
  40. }   
  41. // display the list   
  42. System.out.println("\nList contents:\n");   
  43. for (Object obj: list) {   
  44. System.out.println("Value: " + obj);   
  45. }   
  46. }   
  47. }   

 

Java代码  

  1. <bean id="oracle" name="wiseworm" class="com.apress.prospring3.ch4.BookwormOracle"/>   
  2. <bean id="injectCollection" class="com.apress.prospring3.ch4.xml.CollectionInjection">   
  3. <property name="map">   
  4. <map>   
  5. <entry key="someValue">   
  6. <value>Hello World!</value>   
  7. </entry>   
  8. <entry key="someBean">   
  9. <ref local="oracle"/>   
  10. </entry>   
  11. </map>   
  12. </property>   
  13. <property name="props">   
  14. <props>   
  15. <prop key="firstName">Clarence</prop>   
  16. <prop key="secondName">Ho</prop>   
  17. </props>   
  18. </property>   
  19. <property name="set">   
  20. <set>   
  21. <value>Hello World!</value>   
  22. <ref local="oracle"/>   
  23. </set>   
  24. </property>   
  25. <property name="list">   
  26. <list>   
  27. <value>Hello World!</value>   
  28. <ref local="oracle"/>   
  29. </list>   
  30. </property>   
  31. </bean>   

 ////////////////////////////////////////////////////////////////////////////////////////////////////////////

Xml代码  

  1. <util:map id="map" map-class="java.util.HashMap">   
  2. <entry key="someValue">   
  3. <value>Hello World!</value>   
  4. </entry>   
  5. <entry key="someBean">   
  6. <ref bean="oracle"/>   
  7. </entry>   
  8. </util:map>   
  9. <util:properties id="props">   
  10. <prop key="firstName">Clarence</prop>   
  11. <prop key="secondName">Ho</prop>   
  12. </util:properties>   
  13. <util:set id="set">   
  14. <value>Hello World!</value>   
  15. <ref bean="oracle"/>   
  16. </util:set>   
  17. <util:list id="list">   
  18. <value>Hello World!</value>   
  19. <ref bean="oracle"/>   
  20. </util:list>  

 

Java代码  

  1. @Service("injectCollection")   
  2. public class CollectionInjection {   
  3. @Resource(name="map")   
  4. private Map<String, Object> map;   
  5. @Resource(name="props")   
  6. private Properties props;   
  7. @Resource(name="set")   
  8. private Set set;   
  9. @Resource(name="list")   
  10. private List list;   
  11. // Other codes omitted   
  12. }   

 11.Bean Scopes 

Singleton:The default singleton scope. 

Prototype:A new instance will be created by Spring when requested by application. 

Request:For web application use. When using Spring MVC for web application, 

beans with request scope will be instantiated for every HTTP request and then 

destroyed when the request is completed. 

Session:For web application use. When using Spring MVC for web applications, 

beans with session scope will be instantiated for every HTTP session and then 

destroyed when the session is over. 

Global session:For portlet-based web applications. The global session scope beans 

can be shared among all portlets withinthe same Spring MVC–powered portal 

application. 

Thread: A new bean instance will be created by Spring when requested by a new 

thread, while for the same thread, the same bean instance will be returned. Note 

that this scope is not registered by default. 

Custom:Custom bean scope that can be created by implementing the interface 

org.springframework.beans.factory.config.Scopeand registering the custom 

scope in Spring’s configuration (for XML, use the class org.springframework.beans 

.factory.config.CustomScopeConfigurer). 

时间: 2024-09-17 04:35:54

spring 学习1的相关文章

spring学习笔记(16)趣谈spring 事件机制[2]:多监听器流水线式顺序处理

上一篇我们使用到的ApplicationListener是无序的,结合异步调度它能满足了我们的大部分应用场景,但现在我们来个另类的需求,我们来模拟一条作业调度流水线,它不能异步,必须按照先后次序执行不同的任务才能得到我们的最终结果. 需求示例:现在假如华中科技大学的小白想要为它的智能机器人作品申报国家创新奖,需要经过学校.省级创新科研机构.国家创新科研机构逐层审核.我们尝试通过事件来实现,核心就在监听器实现SmartApplicationListener接口.示例如下: 1. 配置事件发布者小白

spring学习笔记(13)基于Schema配置AOP详解

基于Schema配置入门实例 除了基于@AspectJ注解的形式来实现AOP外,我们还可以在IOC容器中配置.先来看看一个常见的应用场景,在我们的web项目中,我们需要为service层配置事务,传统的做法是在每个业务逻辑方法重复下面配置中: Created with Raphaël 2.1.0程序开始1. 获取DAO层封装好的数据库查询API,如HIbernate中的SessionFactory/Session和mybatis中的xxxMapper2. 开启事务3. 根据入参查询数据库完成相应

spring学习笔记(10)@AspectJ研磨分析[1]入门、注解基本介绍

@AspectJ准备 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. 在使用AspectJ之前,我们需要导入aspectJ相应的jar包,可到我的资源页http://download.csdn.net/detail/qwe6112071/9468329 中下载,而如果使用maven则可直接在pom.xml中加入如下代码: <dependency> <groupId>o

spring学习笔记(19)mysql读写分离后端AOP控制实例

在这里,我们接上一篇文章,利用JNDI访问应用服务器配置的两个数据源来模拟同时操作不同的数据库如同时操作mysql和oracle等.实际上,上个例子可能用来模拟mysql数据库主从配置读写分离更贴切些.既然如此,在本例中,我们就完成读写分离的模拟在web端的配置实例. 续上次的例子,关于JNDI数据源的配置和spring datasource的配置这里不再重复.下面着重加入AOP实现DAO层动态分库调用.可先看上篇文章<spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例 >

spring学习笔记(21)编程式事务配置,service层概念引入

访问数据库事务导入 在我之前的文章<spring学习笔记(19)mysql读写分离后端AOP控制实例>中模拟数据库读写分离的例子,在访问数据库时使用的方法是: public <E> E add(Object object) { return (E) getSessionFactory().openSession().save(object); } 通过直接开启session而后保存对象.查询数据等操作,是没有事务的.而如果我们的项目规模变大,业务逻辑日益复杂,我们在一个方法中进行大

Spring学习笔记之依赖的注解(2)

Spring学习笔记之依赖的注解(2) 1.0 注解,不能单独存在,是Java中的一种类型 1.1 写注解 1.2 注解反射 2.0 spring的注解 spring的 @Controller@Component@Service//更多典型化注解,但是@Controller@Service建议使用 @service("personService")可以代替set get 方法,@Resource(name=personDao) @Autowired//按照类型匹配 @Qualifier

Spring学习笔记之aop动态代理(3)

Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. PersonDao.java public interface PersonDao { public void savePerson(); } PersonDaoImpl.java public class PersonDaoImpl implements PersonDao{ public void save

Spring学习笔记2之表单数据验证、文件上传实例代码_java

在上篇文章给大家介绍了Spring学习笔记1之IOC详解尽量使用注解以及java代码,接下来本文重点给大家介绍Spring学习笔记2之表单数据验证.文件上传实例代码,具体内容,请参考本文吧! 一.表单数据验证 用户注册时,需要填写账号.密码.邮箱以及手机号,均为必填项,并且需要符合一定的格式.比如账号需要32位以内,邮箱必须符合邮箱格式,手机号必须为11位号码等.可以采用在注册时验证信息,或者专门写一个工具类用来验证:来看下在SpringMVC中如何通过简单的注释实现表单数据验证. 在javax

Spring学习笔记3之消息队列(rabbitmq)发送邮件功能_java

rabbitmq简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBM WEBSPHERE MQ. 本节的内容是用户注册时,将邮

Spring学习点滴,《Spring in Action》笔记(四)

61. 更为精彩的是自动代理的方式来总体配置各分散类中方法的事物属性,结合使用 DefaultAdvisorAutoProxyCreator, TransactionAttributeSourceAdvisor 和 TransactionInterceptor (我还需要详细理清楚)(P181) 62. 当使用自动代理时,MethodMapTransationAttributeSource 就能很多的派上用场了,它的 methodMap 属性中可以指定哪个类的哪个方法,可以使用通配符(P182)