回顾spring的基本使用
俗话说:刀久了不用会生锈,同样知识久了也会生疏,本文就spring的基本使用做一个回顾。
概念
spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)
IOC:即控制反转,指创建对象的控制权转移给Spring框架进行管理,并由Spring根据配置文件去创建实例和管理各个实例之间的依赖, 对象与对象之间松散耦合,也利于功能的复用。
AOP:即面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块。这个模块被命名为“切面’’,减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证,日志,事务管理。
优点:
- spring属于低侵入式设计,代码的污染性低
- spring的DI机制将对象之间的依赖关系交由框架处理,减低组建的耦合度
- spring对主流的应用框架提供了集成支持
使用
简单演示一下
-
创建springboot项目 -
假设dao下有这样一个接口: package com.lys.dao;
public interface dbDao {
void use();
}
并有两个实现上述接口的类: package com.lys.dao.dbimpl;
import com.lys.dao.dbDao;
import org.springframework.stereotype.Repository;
@Repository
public class OracleImpl implements dbDao {
@Override
public void use() {
System.out.println("Oracle 数据库");
}
}
package com.lys.dao.dbimpl;
import com.lys.dao.dbDao;
import org.springframework.stereotype.Repository;
@Repository("mysql")
public class MySQLImpl implements dbDao {
@Override
public void use() {
System.out.println("mysql 数据库");
}
}
-
实际使用中获取类的对象实例 有多种方式获取,分别是通过自定义名称,类名.class,或者默认的bean名称,如下; @SpringBootTest
class Spring12ApplicationTests implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
@Test
public void test1(){
MySQLImpl mySQL =applicationContext.getBean(MySQLImpl.class);
mySQL.use();
}
}
4.其实获取bean对象的过程还可以进一步简化,通过@Autowired可以实现自动装配,上面的测试可以简化如下:
@SpringBootTest
class Spring12ApplicationTests implements ApplicationContextAware {
@Autowired
private MySQLImpl mySQLImpl;
@Test
public void test1(){
mySQL.use();
}
}
5.当要引用第三方库时如何注册bean呢?可以写一个配置类,加上注解@confuguration,标明这是一个特殊的类,在类中用@Bean可以自定义返回的Bean类型
举例:
package com.lys.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.text.SimpleDateFormat;
@Configuration
public class AlphaConfig {
@Bean
public SimpleDateFormat simpleDateFormat(){
return new SimpleDateFormat("yyyy-MM-dd");
}
}
当需要时这样调用:
package com.lys;
import java.text.SimpleDateFormat;
import java.util.Date;
@SpringBootTest
class Spring12ApplicationTests implements ApplicationContextAware {
@Autowired
private SimpleDateFormat simpleDateFormat;
@Test
public void test3(){
System.out.println(simpleDateFormat.format(new Date()));
}
}
Spring常用注解
注解名称 | 功能 |
---|
@Controller | 标识该类是spring MVC controller处理器,用来创建http请求对象 | @RestControlle | @Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。 | @Service | 用于标记业务层组件 | @Autowired | 写在字段上或者方法上,用来装配bean | @Repository | 用于标注数据访问组件,即Dao组件 | @component | 当组件不好归类的时候,可以用此注解泛指组件 | @Scope | 用来标识bean的作用域 | @Qualifier | 当创建多个具有相同类型的bean时,可以使用@Qualifier和@Autowired注释使用哪一个真正的bean来装配,从而消除装配时可能遇到的混乱 | @RequestMapping | 提供初步的请求映射信息 | @RequestParam | 用于将请求参数区数据映射到功能处理方法的参数上 | 等等 | … |
|