Spring是一款轻量级的控制反转(IOC)和面向切面(AOP)的框架。
Spring Boot
- 一个快速开发的脚手架。
- 基于SpringBoot可以快速开发单个微服务。
- 约定大于配置
Sping Cloud
- SpringCloud是基于SpringBoot实现的。
IOC理论推导
1.UserDao 接口
2.UserDaoImpl 实现类
3.UserService 业务接口
4.UserServiceImpl 业务实现类
##常用依赖 ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.2</version> </dependency> ``` ##注解说明 两者区别,都是用来自动装配的,都可以放在属性字段上。 - @Autowired:通过byType的方式实现,自动装配先找类型、然后是名字,而且必须要求这个对象存在。 如果不能唯一自动装配上属性,则需要通过@Qualifier(value="自定义的id") - @AUtowired @Qualifier(value="id") - @Resourse自动装配通过名字,然后是类型。(默认通过byname的方式实现) - @Component : 组件,放在类上,即表示这个类被Spring管理了,就是bean! - 衍生注解,功能相同,名字不同。在mvc三层架构中分层使用。 - dao层: 【@Repository】 - service层: 【@Service】 - controller层: 【@Controller】 - @Value(""): 放在set方法或属性即代表赋值给它。 - 作用域:@Scope("singleton")单例模式,@Scope("prototype")原型模式。 ##注解开发 - 注解支持 applicationContext.xml ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <context:annotation-config/> <!-- 指定要扫描的包,这个包下的注解就会生效--> <context:component-scan base-package="com.stx"/> </beans> ``` ##AOP面向切面编程 - 导一个切面包 ```xml <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency> ``` - 自定义类方式实现切面 ```java 方式一: <!-- 注册bean--> <bean id="要注册的类" class="com.stx.service.*"/> <!-- 自定义类切面--> <bean id="要引用的类" class="com.stx.service."/> <aop:config> <aop:aspect ref="要引用的类"> <aop:pointcut id="point" expression="execution(* com.stx.service.*(..))"/> <!-- 通知--> <aop:after method="" pointcut-ref="point"/> </aop:aspect> </aop:config> 方式二: <!--配置aop:需要导入aop的约束--> <aop:config> <aop:pointcut id="pointcut" "/> <!-- 执行环绕增加--> <aop:advisor advice-ref="要切入的类" pointcut-ref="pointcut"/> <aop:advisor advice-ref="要切入的类" pointcut-ref="pointcut"/> <aop:advisor advice-ref="要切入的类" pointcut-ref="pointcut"/> </aop:config> 方式三: <bean>注册后加上一句<aop:aspectj-autoproxy/>//开启注解支持 @Aspect//标记这个类名是个切面 @Before("expression="execution(* com.stx.service.实现类.*(..))")//标记方法执行前后。 ``` ##整合mybatis-spring - 第一步配置xml文件 ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <!--使用spring的数据源替换mybatis的配置--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--sqlSessionFactory的创建--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 绑定mybatis配置文件(可有可无,最好加上)--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations" value="classpath:com/stx/mapper/*.xml"/> </bean> <!--此处面向对象,所以需要一实现类--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <!-- 只能使用构造器注入sqlSessionFactory,因为它没有set方法--> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean> </beans> ``` - 第二步,实现类 ```java //接口的实现类 public class UserMapperImpl implements UserMapper { private SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } //用sqlSession重写方法 @Override public List<User> selectUser() { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.selectUser(); } } ``` - 第三步,bean注入spring ```xml <bean id="userMapper" class="com.stx.mapper.UserMapperImpl"> <property name="sqlSession" ref="sqlSession"/> </bean> ```