SpringBoot

110 篇文章 0 订阅
1 篇文章 0 订阅

1.Spring的发展史

1.1Spring1.X时代

都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。

1.2Spring2.X时代

随着JDK1.5带来的注解支持,spring2.X可以使用注解对bean进行申明和注入,大大减少了xml配置文件,同时也大大简化了项目的开发。

那么问题来了,究竟是应该使用xml还是注解呢?

最佳实践:

1.应用的基本配置用xml,比如:数据源、资源文件等等;

2.业务开发用注解,比如:service中注入bean等等

1.3Spring3.X到spring4.X

从spring3.X开始提供了java配置方式,使用java配置方式可以更高的理解你配置的bean,现在我们就处于这个时代,并且spring4.x和springboot都推荐使用java配置的方式

2.spring的java配置方式

2.1.@Configuration和@Bean

spring的java配置方式是通过@Configuration和@Bean这两个注解实现的:

  • @Configuration作用于类上,相当于一个xml配置文件
  • @Bean作用于方法上,相当于xml配置中的<bean>;
  • spring boot基于springmvc的基础上进行了改进,将@controller与@ResponseBody进行了合并成一个新的注解@RestController

2.2示例,该示例演示了通过java配置的方式进行配置spring,并实现了springIOC功能。

2.21创建工程以及依赖架包

<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-webmvc</artifactId>
  		<version>4.3.9.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.apache.tomcat</groupId>
  		<artifactId>dbcp</artifactId>
  		<version>6.0.29</version>
  	</dependency>

2.22编写user对象

public class User {

	private String username;
	private String password;
	private Integer age;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
}

2.23编写UserDao用于模拟与数据库的交互

public class UserDao {

	public List<User> findAll(){
		List<User> list = new ArrayList<User>();
//		模拟数据库查询
		for (int i = 0; i < 10; i++) {
			User user = new User();
			user.setUsername("username"+i);
			user.setPassword("password"+i);
			user.setAge(i);
			list.add(user);
		}
		return list;
	}
}

2.24编写userService用于实现user数据操作业务逻辑

@Service
public class UserService {

	@Autowired
	private UserDao userDao;
	public List<User> findAll(){
		List<User> list = userDao.findAll();
		return list;
	}
}

2.25编写springConfig用于实例化spring容器

@Configuration//通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages="com.zhiyou100.service")
public class SpringConfig {
	@Bean //通过该注解来表明一个Bean对象,相当于xml中的<bean>
	public UserDao getUserDao() {
		return new UserDao();//直接new对象做演示
		
	}
}

2.26编写测试方法用于启动spring容器

//编写测试方法 用于启动Spring容器
public class Main {
	public static void main(String[] args) {
		//通过java配置来实例化spring容器
		AnnotationConfigApplicationContext acac = 
				new AnnotationConfigApplicationContext(SpringConfig.class);
		//在spring容器中获取对象
		UserService service = acac.getBean(UserService.class);
		//调用对象的方法
		List<User> list = service.findAll();
		for (User user : list) {
			System.out.println(user.getUsername()+","+user.getPassword());
		}
		//销毁容器
		acac.destroy();
	}
}

2.27测试效果

从以上的示例中可以看出,使用java代码可以完美的代替xml配置文件,并且结构更加的清晰。

3.1读取外部的资源配置文件

通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值

@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
@PropertySource(value= {"classpath:jdbc.properties"})
public class SpringConfig {
    
    @Value("${jdbc.url}")
    private String jdbcUrl;
    
    @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    public UserDAO getUserDAO(){
        return new UserDAO(); // 直接new对象做演示
    }
    
}

思考:

  1. 如何配置多个配置文件?
 @ComponentScan(basePackages="com.zhiyou100.service")
@PropertySource(value= {"classpath:jdbc.properties","XXXX"},ignoreResourceNotFound = true)
public class SpringConfig {}
  1. 如果配置的配置文件不存在会怎么样?
@ComponentScan(basePackages="com.zhiyou100.service")
@PropertySource(value= {"classpath:jdbc.properties","XXXX"},ignoreResourceNotFound = true)
public class SpringConfig {}

3.2配置数据库连接池

@Value("${url}")
	private String url;
	@Value("${driverClass}")
	private String driverClassName;
	@Value("${user}")
	private String user;
	@Value("${password}")
	private String password;
    @Bean
	public DataSource dataSource() {
		BasicDataSource bds = new BasicDataSource();
		//数据驱动
		bds.setDriverClassName(driverClassName);
		//相应数据库驱动jdbcurl
		bds.setUrl(url);
		//数据库的用户名
		bds.setUsername(user);
		//数据库的密码
		bds.setPassword(password);
		return bds;
	}

4.springboot

4.1什么是springboot

是使用springboot很容易创建一个独立的运行(运行jar,内嵌servlet容器)、准生产级别的基于spring框架的项目,使用springboot可以不用或者只需要很少的spring配置

4.2springboot的优缺点

优点:

  • 快速构建项目
  • 对主流开发的无配置集成
  • 项目可独立运行,无须外部依赖servlet容器;
  • 提供运行时的应用监控;
  • 极大地提高了开发、部署效率
  • 与云就是那的天然继承

缺点:

  • 书籍文档较少且不够深入

4.3设置spring boot 的parent

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
	</parent>

导入spring boot的web支持

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

添加springboot的插件

<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

编写一个spring boot的应用

@Controller
@SpringBootApplication
@Configuration
public class HelloApplication {
    
    @RequestMapping("hello")
    @ResponseBody
    public String hello(){
        return "hello world!";
    }
    
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }

}

代码说明:

  • 1、@SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置。;
  • 2、@Configuration:这是一个配置Spring的配置类;
  • 3、@Controller:标明这是一个SpringMVC的Controller控制器;
  • 4、main方法:在main方法中启动一个应用,即:这个应用的入口;

4.4springboot的核心

Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。

@SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解:

该注解主要组合了以下注解:

@SpringBootConfiguration:这是Spring Boot项目的配置注解,这也是一个组合注解:

在Spring Boot项目中推荐使用@ SpringBootConfiguration替代@Configuration

@EnableAutoConfiguration:启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项:

如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC

@ComponentScan:默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。

4.5xml配置文件

springboot提倡零配置,即无xml配置,但是在实际项目中。可能有一些特殊要求你必须使用xml配置,这是我们可以用个spring提供的@ImportResource来加载xml配置。

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

5.spring boot 的web开发    Web开发的自动配置类:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration

<!-- 1.servlet依赖-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
<!-- 2.jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!-- 3.jsp支持 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

然后正常编程即可,重定向也可以。页面传值,中文乱码都可以

自动配置静态资源,可以直接访问

自定义springmvc的配置

有些时候我们需要自已配置SpringMVC而不是采用默认,比如说增加一个拦截器,这个时候就得通过继承WebMvcConfigurerAdapter然后重写父类中的方法进行扩展。

第一步创建一个类实现HandlerInterceptor接口,重写接口的方法,只是多了一个@Component注解,这个注解是为后面的使用时进行注入
@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器开始拦截");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器时");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器之后");
    }
}

第二步在入口类的目录或者兄弟目录下创建一个类继承WebMvcConfigurerAdapter类并重写addInterceptors方法;

@SpringBootConfiguration注解表明这是一个配置类

@SpringBootConfiguration
public class InterceptorConfig extends WebMvcConfigurationSupport {

    @Autowired
    MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
        System.out.println("拦截器启动");
        super.addInterceptors(registry);
    }
}

若目录不是兄弟或子目录可以不用注入用new即可

设置事务管理

在Spring Boot中推荐使用@Transactional注解来申明事务。

首先需要导入依赖:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值