Spring学习笔记
1.什么是Spring?
- Spring框架是由于软件开发的复杂性而创建的。
- Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。
- Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。</pre>
特点:
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
Spring 有两个核心部分:IOC 和 Aop
2.IOC
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。
通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
IoC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF中。
1.IOC操作JAVABean管理
****Bean 管理指的是两个操作 (1)Spring 创建对象 (2)Spirng 注入属性****
****Spring有两种方式操作JAVABean管理 (1) 基于注解 (2) 基于XML配置******
(1)基于XML方式
创建对象
public class Book {
public void sout(){
System.out.println("aaaa");
};
}
创建SpringXML
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
在XML中配置javaBean
<!-- 配置Spring对象--> <bean id="book" class="com.company.User"></bean>
使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
在 bean 标签有很多属性,介绍常用的属性
id 属性:唯一标识
class 属性:类全路径(包类路径)
-
创建对象时候,默认也是执行无参数构造方法完成对象创建
属性注入(XML方式)
1.第一种用set方法进行属性注入
首先创建类的方法
public class Book {
private String name;
private String author;
public void setName(String name) {
this.name = name;
}
public void setAuthor(String author) {
this.author = author;
}
public void sout()
{
System.out.println(name+" "+author);
}
}
**在XML中进行属性注入**
<!-- 第一种set注入方式-->
<bean id="book" class="com.company.Book">
<!-- 使用property完成属性注入
name:类里面属性名称
value:向属性注入的值-->
<property name="name" value="九阴真经"></property>
<property name="author" value="林书平"></property>
</bean>
2.用有参构造注入属性
首先创建对象的有参构造方法
public class Book {
private String name;
private String author;
public Book(String name, String author) {
this.name = name;
this.author = author;
}
}
**在XML中进行属性注入**
<!-- 第二种构造函数方式-->
<bean id="book" class="com.company.Book">
<constructor-arg name="name" value="葵花宝典"></constructor-arg>
<constructor-arg name="author" value="林书平"></constructor-arg>
</bean>
**注意:**xml注入其他类型属性**
null 值
<property name="address">
<null/>
</property>
属性值包含特殊符号
<!--两种方法
1 转义 < < > >
2 把带特殊符号内容写到 CDATA
-->
<property name="address">
<value><![CDATA[<<内容>>]]></value>
</property>
****3.注入外部Bean属性****
**(1)创建两个类 service 类和 dao 类**
**(2)在 service 调用 dao 里面的方法**
**(3)在 spring 配置文件中进行配置**
**首先创建Bean**
**Dao**
public interface UserDao {
public void add();
}
public class UserDaoImpl implements UserDao{
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public void add() {
System.out.println("UserDaoImpl......."+" "+name);
}
}
**Service**
import com.company.Dao.UserDao;
public class UserService {
//创建属性
private UserDao userDao;
//创建set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add()
{
System.out.println("UserService.....");
userDao.add();
}
}
**在XML中这样配置**
<!-- 外部bean注入-->
<bean id="userService" class="com.company.Service.UserService">
<!--注入 userDao 对象
name 属性:类里面属性名称
ref 属性:创建 userDao 对象 bean 标签 id 值 -->
<property name="userDao" ref="userDao" ></property>
<!--给userDao的name注入属性-->
<property name="UserDao.name" value="sss"></property>
</bean>
<bean id="userDao" class="com.company.Dao.UserDaoImpl"></bean>
</beans>
**4.注入集合类型属性**
**注入数组类型属性 注入 **List** 集合类型属性 注入 **Map** 集合类型属性 (1)创建类,定义数组、list、map、set 类型属性,生成对应 set 方法**
import java.util.List;
import java.util.Map;
public class Book2 {
private List<String> list;
private Map<String, String> map;
public void setList(List<String> list) {
this.list = list;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void sout()
{
System.out.println(list+" "+map);
}
}
**xml配置**
<!-- 集合注入-->
<bean id="book2" class="com.company.Book2" init-method="InitMend">
<property name="list">
<list>
<value>Java</value>
</list>
</property>
<property name="map">
<map>
<entry key="JS" value="牛逼"></entry>
</map>
</property>
</bean>
**(2)基于注解方式**
**什么是注解?**
**(1)注解是代码特殊标记。**
**(2)使用注解,注解作用在类上面,方法上面,属 性上面。**
**(3)使用注解目的:简化 xml 配置。**
****Spring** 针对 **Bean** 管理中创建对象提供注解**
**(1)@Component**
**(2)@Service**
**(3)@Controller**
**(4)@Repository**
**第一步引入相关依赖**
**第二步开启组件扫描**
import org.springframework.stereotype.Component;
@Component(value = "userService")
public class UserService {
public void add(){
System.out.println("UserService创建了");
}
}
**测试**
package com.CodeChao.text;
import com.CodeChao.Config.SpringConfig;
import com.CodeChao.Service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class text {
@Test
public void T1()
{
ApplicationContext context=new ClassPathXmlApplicationContext("Bean.xml");
UserService userService = context.getBean("userService", UserService.class);
userService.add();
}
}
**基于注解方式实现属性注入 @Autowired:根据属性类型进行自动装配**
**@Qualifier:根据名称进行注入**
**@Resource:可以根据类型注入,可以根据名称注入**
**第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解**
**第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解**
**创建UserDao对象
package com.dao;
import org.springframework.stereotype.Component;
//使用注解配置javaBean
@Component
public class UserDao {
public void sout()
{
System.out.println("UserDao-------");
}
}
**创建Service**
package com.Service;
import com.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
@org.springframework.stereotype.Service
public class Service {
//基于注解属性注入
@Autowired
private UserDao userDao;
public void add()
{
System.out.println("service-------");
//调用UserDao的方法
userDao.sout();
}
}
**测试**
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
@Test
public void t1()
{
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
Service userService = context.getBean("service", Service.class);
userService.add();
}
}
**到这里Spring-IOC就结束了!!! 感谢观看~~~**