Spring是一种非侵入式框架
飞侵入式
对现用功能没有影响,能够增强JavaBean的功能
松耦合
前面我们写程序的时候,都是面向接口编程,通过DaoFactory等方法实现松耦合。即减少模块间的关联性
Dao层和Service层通过DaoFacotry来实现松耦合,如果Service层直接new DaoBook(),那么Dao和Service层就是关联性紧,即紧耦合。
在Spring层可以 private BookDao bookDao = DaoFacotry.getInstance().createDao("zhonggong.dao.impl.userDaoimp",OrderDao.class); @Override @Permission("添加分类") /*添加分类*/public void addCategory(Category category){cateGoryDao.addCategory(category);}
Spring中提供了IOC控制反转来松弛模块之间的关联度。在采用面向对象设计的系统中,所有对象通过彼此的合作,最终通过系统的业务逻辑,即软件系统中对象之间的互相合作来形成业务逻辑。而IOC是将复杂的系统分解为相互合作的关系.
把各个部分封装之后,通过IOC容器来关联这些对象。这称为控制反转,又叫依赖注入
切面编程也是AOP编程,动铁编程也是一种切面编程
动态代理+注解的方法给Service添加权限
Controller调用Service的时候,Service返回的是一个代理对象。
代理对象得到Controller想要的方法的时候,通过反射来看该方法有没有注解
如果有注解,就判断该用户是否有权限来调用改方法,没有权限则抛出给controller,controlller得到没有权限异常就可以对用户进行提示
AOP:在执行某些代码前,执行另外的代码
struct2的拦截器也是面向切面拦截
action:多个,访问时创建,依赖service
service:一个,不需要维护公共变量,启动时创建,依赖dao
dao:一个,启动时创建
注释:@Controller 数据经过业务处理逻辑后封装成一个model,然后再返回给View进行展示
在SpringMVC中提供了一个简便的定义Controller的方法,你无需继承特定的类或者接口,只需要使用Controller 标记一个controller
@RequestMapping 注解,
作用域@Scope prototype request session global session
自动装配@Autowired
@Component:标准一个普通的spring Bean类。
@Controller:标注一个控制器组件类。
@Service:标注一个业务逻辑组件类。
@Repository:标注一个DAO组件类。
@Runwith()是一个运行器,括号里跟Unit4.class Suite.class
@ContextConfiguration Spring整合多个Utnit4测试的时候,使用注解引入多个配置文件
单个文件:
@ContextC2 onfigruation(Locations="classpath:applicationContext.xml)
@ContextConfiguration(locations = { "classpath:spring1.xml", "classpath:spring2.xml" })
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载
@Async异步方法调用
bean.xml:<context:compnent-scan base-package="com.kn.beanScope">
@Component//标注这是一个普通的BEAN文件
public void sout(){
System.out.println("????THIS is OH Data!");
}
BeanScope.java,中scope设定定义域,每次新建自身实例
@Component
@Scope("prototype")
public class BeanScope(){
@Autowired
private OH oh;
private String beanname;
}
UserAxeTest
ApplicationContext ctx = new ClassPathXmlApplication("bean_zj.xml");
BeanScope beanscope = ctx.getBean("beanscope",BeanScope.class);
beanScope.init();
BeanScope.beanscope1=ctx.getBean("beanScope",BeanScope.class);
获取两次 beanScope 然后 第一次先调用init 再say,第二次 直接say
Spring的Datasource多循环问题:1、准备依赖 2.token从以前的数据库移除了,移到了redis端
maven repository:maven中央仓库
链接打开后如下:
那么怎么使用这个网站呢?
举例,我需要写一个java发送邮件的功能,需要java.mail的jar包。那么我直接在搜索框中输入:mail,搜索结果如下:
如图,我们看到了前两个选项:JavaMail API JAR和JavaMail API(compat)。
按照惯例选择usages最多的那个,也就是javaMail API(compat),点击打开。
然后在下面的version里面选一个,比如1.4.7。
将下面的xml代码复制到你的pom.xml中即可。
Spring Web Spring对web模块的支持。
可以与struts整合,让struts的action创建交给spring
spring mvc模式
Spring DAO Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】
Spring ORM spring对orm的支持:
既可以与hibernate整合,【session】
也可以使用spring的对hibernate操作的封装
Spring AOP 切面编程
SpringEE spring 对javaEE其他模块的支持
依赖注入:甲方开放接口时,乙方可以传递进来控制反转,
甲乙双方不相互依赖,交易活动时不依赖甲乙任何一方,整个活动不依赖甲乙任何一方,整个活动由第三方解决
单例的好处:效率高,不浪费空间。方便单元测试,方便切换mock组件,方便于AOP操作,对于操作是透明的,统一配置,便于修改
Spring可以分成六大模块:spring core spring的核心,IOC:容器,解决对象创建以及依赖问题
spring web spring对web模块的支持,可以和struct融合,把struct的action交给Spring来创建
spring MVC模式,spring DAO spring对orm的支持,也可以和hibenate整合,也可以使用spring对hibernate操作的封装
Spring AOP的切面操作
SpringEE spring对JAVAEE其他模块的支持:Core模块快速入门
引入jar包:
本博文主要是core模块的内容,涉及到Spring core的开发jar包有五个:
commons-logging-1.1.3.jar 日志
spring-beans-3.2.5.RELEASE.jar bean节点
spring-context-3.2.5.RELEASE.jar spring上下文节点
spring-core-3.2.5.RELEASE.jar spring核心功能
spring-expression-3.2.5.RELEASE.jar spring表达式相关表
Spring的核心配置文件是ApplicationContext.xml或者叫bean.xml,
core容器是ICO容器,能解决对象创建之间的依赖关系,IOC细节
得到Spring容器对象,IOC容器.000000
Spring容器不单单只是一个,可以归类为两种类型
Bean工厂,BeanFactory ( 功能简单)\
应用上下文,ApplicationContext(功能强大,一般我们使用这个)
通过Resource获得BeanFactory
加载Spring配置文件来创建IOC容器
类路径下XML获取ApplicationContext
直接通过ClassPathApplicationContext对象来获取
//得到IOC容器对象,ApplicationContext ac
=newClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(ac;)
Spring中总可以通过三种方法来配置对象
使用XML来配置,使用注解来配置,使用JavaConfig来配置