目录
# FactoryBean spring中有两种Bean对象,一种为普通Bean,另一种为工厂bean。工厂bean返回的不是指定类的实例,而是接口中FactoryBean的getObject()返回对象。是否为单例有isisSingleton()。Class<?> getObjectType()返回Bean的类型 | 方法名 | 说明 | |--|--| |T getObject() | 返回的对象实例| |isisSingleton()|默认值为false,true是单例,false是非单例 |class<?> getObjectType() |返回Bean的类型| 特点:
- spring隐藏了实例化复杂Bean的细节,我们只需关注调用接口,实现方法。
- 支持泛型
适用范围:通常是用来创建复杂的bean,一般用xml配置即可
Spring常用注解
MyBatis注解
mybatis常用注解
mybatis逆向工程
Spring与MyBatis集成(SM)
1.添加依赖
<dependencies>
<!--jdbc驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!--Mybatis 框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--Druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
<!--对于持久层的关联-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
<!--spring和mybatis关联-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
2.逆向生成Mybatis代码
只生成单表操作的代码,我们可以根据实际需要增加功能代码
3.配置spring文件
<!--扫描当前项目所有要被Spring管理的实例-->
<context:component-scan base-package="com.pei"></context:component-scan>
<!--生成数据库连接池对象-->
<bean id="dataSoure" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/shop_demo_1?useUnicode=true&characterEncoding=UTF-8"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!--生成FactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入连接对象-->
<property name="dataSource" ref="dataSoure"></property>
<!--别名包-->
<property name="typeAliasesPackage" value="com.pei.pojo"></property>
</bean>
<!--扫描所有的包 扫描dao所在的包,把所有dao接口对应的dao.xml生成对应实例-->
<bean id="mappeiScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<property name="basePackage" value="com.pei.dao"></property>
</bean>
4.生成代码
package com.pei.service.impl;
import com.pei.dao.GoodsDAO;
import com.pei.pojo.Goods;
import com.pei.pojo.GoodsExample;
import com.pei.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @program: SpringAndMybatis
* @description
* @author: 彭于晏
* @create: 2021-07-19 00:04
**/
@Service
public class GoodsServiceImpl implements GoodsService {
@Autowired
private GoodsDAO goodsDAO;
/***
* 添加
* @param goods
*/
@Override
public int save(Goods goods) {
Goods goodsresult=new Goods();
return goodsDAO.insertSelective(goodsresult);
}
/**
* 删除
*
* @param id
*/
@Override
public int delete(Integer id) {
return goodsDAO.deleteByPrimaryKey(id);
}
/***
* 更新
* @param goods
*/
@Override
public int update(Goods goods) {
Goods goodsresult=new Goods();
return goodsDAO.updateByPrimaryKeySelective(goodsresult);
}
/***
* 获得所有物品
* @return
*/
@Override
public List<Goods> getAllGoods() {
return goodsDAO.selectByExample(null);
}
/**
* 按照id来查询
*
* @param id
* @return
*/
@Override
public Goods getByID(Integer id) {
return goodsDAO.selectByPrimaryKey(id);
}
}
AOP概述
AOP是啥?
Spring 框架的一个关键组件是面向方面的编程(AOP)框架,面向切面编程。面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点。不改变原有代码,将新增的代码插进去。
有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。
aop和oop
OOP是面向对象编程,核心思想是对业务处理过程中实体和熟悉进行抽象封装。java实体类就是面对对象编程的体现
AOP是面向切面编程,核心思想是只针对处理过程中的与类不相关的通用功能,已获得各部分的低耦合的隔离效果。
实现底层实现
由JDK提供的动态代理技术和CGLIB(动态字节码增强技术)实现。
- JDK动态代理:只针对接口操作
- CGLIB:可以针对没有接口的java类和有接口的类
静态代理
局限性:只针对接口来使用,接口多了话要每个编写,增加工作量