spring基本就两个核心内容,IOC和AOP。把这两个学会了基本上就会用了。html
--WZYjava
1、什么是IOC?web
IOC:控制反转,通俗点讲,将对象的建立权交给spring,咱们须要new对象,则由spring帮咱们建立,而后供咱们使用。spring
编写IOC的helloworld。简单的三步就搞定了数组
一、导入jar包架构
5个包,4个核心包,1个依赖包 app
二、编写配置文件测试
spring帮咱们建立对象,但也必须有相关类的信息,否则怎么可以建立呢?spa
配置文件名称:建议:ApplicationContext.xml,取别的也能够,可是取建议的名称的话,找到该配置文件更为简单,prototype
配置文件位置:任意,通常都在classpath下(src)
文件约束内容:添加约束,spring-framework-3.2.0.RELEASE 为spring的核心 docs为帮助文档
约束位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html
三、从spring容器中获取对象
UserService.java
2、依赖注入(DI)
如今应该知道了什么是IOC,helloworld很简单吧,但spring若是只提供这么一个简单的功能,就不能被你们那么所崇拜了,上面只是把IOC这个功能给你们简单展现一下,让你们脑海中有IOC是干什么的,能作什么的概念,如今就对其进行增强把。
依赖注入(DI):spring建立对象A时,会将对象A所依赖的对象B也建立出来,并自动注入到对象A中。
依赖:(has a) 有一个的意思,好比类A中有一个类B,那么就说A依赖B。 继承,实现(is a)
而咱们说的依赖注入,就是当建立A对象时,同时会将B对象给建立,并自动注入到对象A中去,也就说,我只叫spring给我A对象,可是A中可使用B对象了。这个有很大的用处,但如何去实现依赖注入功能呢?
UserService中有使用userDao对象,这个咱们都很熟悉的使用伎俩,service层调用dao层的方法。按照往常咱们的写法,在service中须要本身new出UserDao对象,可是在spring中就不须要了,一切对象都让spring帮咱们建立。
ApplicationContext.xml
过程就如图中所画,先建立UserService对象,而后在根据property中的ref找到userDaoId并建立UserDao对象,而后根据property中的name,经过setter方法注入,这样就完成了依赖注入。
测试:
3、spring建立实例对象的三种方法
由于并非每一个bean都是普通类,有些是经过工厂来获取的,而工厂就有静态工厂和实例工厂,因此spring建立实例对象有三种状况,
默认无参构造,就是编写IOC的helloworld的那种方式,直接<bean id="" class="">
静态工厂:因为是静态工厂,因此经过工厂类直接调用建立实例的方法就能够了。
<bean id="" class="工厂全限定类名" factory-method="静态方法">
实例工厂:须要先建立出工厂实例,而后在由工厂建立对象
<bean id="myFactoryId" class="工厂全限定类名"></bean>
<bean id="" factory-bean="myFactoryId" factory-method=""></bean>
4、属性依赖注入基于XML
以前讲的那个依赖注入其实也属于属性依赖注入这一范畴中,在最开始咱们演示IOC(控制反转)也就是spring帮咱们建立实例时,那只是经过无参构造方法进行建立,那么在实际开发中,这样建立确定是不行的,因此咱们须要在spring的配置文件中配置一些属性信息,使spring帮咱们建立时,能够直接将对象的一些属性也注入进去,有两种方法
经过构造方法注入
不论是普通属性仍是引用数据,均可以经过构造方法进行注入。
经过setter方法进行注入
经过setter方法对普通属性和引用属性进行注入,那么要是建立的对象中有集合呢?那该如何进入注入?
集合的注入List、Map、Set、数组、Properties等。
List
set
map
数组
propertyis
注意:properties这种类型存放形式跟map差很少,以key和value进行存放的,
到这里,基本上就把全部可以注入的属性类型都讲解完了,注入的类型基本上分为三块,普通类型,引用类型和集合。下面在讲一种基于注解来注入各类,由于基于xml感受很麻烦。
5、属性依赖注入基于注解
注解格式:@xxx
使用注解:必须对使用注解的地方进行扫描,否则注解没用。而扫描须要作两件事
一、添加名称空间,
在咱们找配置文件中约束的位置那:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html 找到context的名称空间。
二、扫描指定的目录,
注解:
一、@Component 替代 <bean id="" class=""> 能够配置任意bean,在所在类上面添加该注解便可,
@Component("userId") userId至关于bean中的id属性值
二、 这三个就跟使用@Component是同样的,可是为了更好的体现三层架构,就有了这三个注解
@Controller 修饰web层中的类。
@Service 修饰service层的类
@Repository 修饰dao层的类
两种方式,一种不声明名称,一种声明名称
@Controller("xxx") @Controller
若是声明了名称,那么在别的地方引用的话,就可使用@Autowired或@Autowired与@Qualifier的组合 或直接使用@Resource按照名称注入
若是没有声明名称,那么在别的地方引用的话,只能使用@Autowired 来进行注入
三、属性注入
普通属性
@Value @Value("") 给普通属性注入属性值
引用属性
@Autowired 按默认类型进行注入
@Qualifier("") 按照名称注入
若是使用了@Qualifier这个注解,那么就须要两个一块儿使用才能生效。若是只使用@Autowired,那么写不写@Qualifier均可以
引用属性
@Resource 直接按照名称注入,与上面两个注解一块儿使用是等效的
@Resource(name="xxx")
四、使用
五、其余注解
@Scope("prototype") 做用域注解(spring帮咱们建立的bean实例的做用域,在下面会讲解到)
@PostConstruct 修饰初始化
@PreDestory 修饰销毁
最后两个用的很少,掌握前面的便可。
6、spring建立的bean的做用域
也就是spring帮咱们建立的bean的使用范围。
格式:<bean id="" class="" scope="....">
取值:
掌握前两个,singleton 和prototype
singleton:单例,也就是当spring经过xml配置文件帮咱们建立一个bean对象时,那咱们拿到的就一直是同一个对象,仅存在一个那样的bean实例。默认值
prototype:每次咱们须要bean实例时,都会建立一个新的实例。
7、编写applicationcontext.xml提示问题
五步便可解决
第一步:spring的核心jar中找到Scheme xsd文档
spring-framework-3.2.0.RELEASE\schema\beans\spring-beans-3.2.xsd
第二步:从xml配置文件中,获取xsd文档位置,复制....spring-beans.xsd
第三步:window/preferences/ 搜索 “xml catalog”
第四步:
第五步:
注意:若是xml没有提示,关闭xml重写打开。
8、总结
spring的第一个重点IOC,就这样讲完了,其实看完以后很是简单,就是让spring给你建立对象,你想要对象的时候,就找spring,让他给。
学的东西有:
什么是IOC,什么是依赖注入。
以后对依赖注入进行详细的讲解。
使用xml方式和使用注解方式
说简单点,这一节就是学会了经过配置,让spring帮咱们建立咱们想要的bean,