SSM学习笔记

SSM学习笔记

Spring_quickstart的对象注入

    <bean id = "bookService" class="com.cwnu.service.Impl.bookServiceImpl">
        <property name="bookDao" ref="bookDao"/>  <!--注入对象,name指的是声明的对象的名字,ref指的是xml中对象的id名称-->
    </bean>

    <bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"/>
//bookService类的bookDao对象创建方式
public class bookServiceImpl implements bookService {
    bookDao bookDao;//只用声明对象,但不用new,对象由IOC容器提供(在XML中配置)
    @Override
    public void save() {
        System.out.println("bookService save...");
        bookDao.save();
    }
    //创建对象的方法
    public void setBookDao(bookDao bookDao){
        this.bookDao = bookDao;
    }
}
//main方法的写法
public class APP {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        bookService bookService  = (bookService) ctx.getBean("bookService");
        bookService.save();
    }
}

Bean配置

基本配置

    <bean id = "bookService" class="com.cwnu.service.Impl.bookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>
    <bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"/>

别名配置

    <bean id = "bookService" name="service,service2,service3" class="com.cwnu.service.Impl.bookServiceImpl"> <!--name属性表示别名,可用空格,逗号,分号分隔-->
        <property name="bookDao" ref="bookDao"/>
    </bean>
    <bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"/>

作用范围配置

spring默认配置的对象是单例,我们需要用scope配置,prototype是多例,singleton是单例

bean的实例化

1、容器通过构造方法实现对象

public class bookDaoImpl implements bookDao {
    public bookDaoImpl(){//可以用public,也可以用private
        System.out.println("无参构造器...");
    }
    @Override
    public void save() {
        System.out.println("bookdao save...");
    }
}

2、使用静态工厂实现对象

3、使用实例工厂实现对象

4、使用FactoryBean实现对象

Bean的生命周期

依赖注入方式

setter注入

1、引用类型

public class bookServiceImpl implements bookService{
    bookDao bookDao;
    public void setBookDao(bookDao bookDao){
        this.bookDao = bookDao;
    }
    //其他事务处理
}
    <bean id = "bookService" class="com.cwnu.service.Impl.bookServiceImpl">
        <property name="bookDao" ref="bookDao"/>    <!--用property标签设置-->
    </bean>

2、基本类型

    <bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl">
        <property name="name" value="周锦"/>
        <property name="num" value="20"/>
    </bean>
public class bookDaoImpl implements bookDao {
    private int num;
    private String name;
    public void setName(String name){
        this.name = name;
    }
    public void setNum(int num){
        this.num = num;
    }
    //其他事务处理
}

构造器注入 (自己做模块不推荐使用)

依赖自动装配

集合注入

1、数组注入

2、list注入

3、set注入

4、map注入

5、property注入

第三方数据管理

<!--管理德鲁伊德数据库资源对象-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db_fruit"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

用properties文件加载数据

加载properties文件的方式

创建容器的方式

获取Bean的方式

注解开发

注解开发定义Bean

@component:
	@service 业务层
	@repository 数据层
    @controller 表现层
//上述四个是相同的意思,只是用下面的三个增强可读性

注解方式定义Bean的生命周期

注解方式的依赖注入

引用类型的注入

简单类型的注入

加载外部properties文件

第三方Bean的管理


第二种扫描式不太推荐

第三方Bean的依赖注入

Spring整合Mybatis


spring整合Junit

面向AOP编程

//pom.xml中的maven配置
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>
//main方法
public class app {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = ctx.getBean(BookDao.class);
        bookDao.update();
    }
}

dao层

//接口
public interface BookDao {
    public void save();
    public void update();
}
//实现类
@Repository
public class BookDaoImpl implements BookDao {
    @Override
    public void save() {
        System.out.println(System.currentTimeMillis());//切面,用于对比
        System.out.println("book dao save...");
    }

    @Override
    public void update() {
        System.out.println("book dao update...");
    }
}

aop层

//aop
@Component //表示一个Bean
@Aspect //添加此注解,下面的那些才能有用
public class MyAdvice {
    @Pointcut("execution(void com.cwnu.dao.BookDao.update())") //切入点,表示执行到update()方法
    private void pc(){}

    @Before("pc()") //表示在执行到update()方法之前执行method()方法,method()是切入方法
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

config层

@Configuration //这是一个配置类
@ComponentScan("com.cwnu") //扫描包,在这个扫描路径下的Bean才能实现对象
@EnableAspectJAutoProxy //切面驱动,有这个注解才能使用面向AOP编程
public class SpringConfig {
}

SpingMvc

<!--依赖配置-->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.10.RELEASE</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

controller

@Controller
public class UserController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("user save..");
        return "{'name':'zhoujin'}";
    }
}

config

//SpringMvc配置
@Configuration
@ComponentScan("com.cwnu.controller")
public class SpringMvcConfig {
}
//Servlet容器,加载tomcat时候加载这个类
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class); //容器加载springmvc配置
        return ctx;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

乱码处理

对于post类请求,如果提交的数据有中文,可能会出现乱码,对此我们在ServletContainerInitConfig类里面添加过滤器

    //乱码处理

@Override
protected Filter[] getServletFilters() {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    return new Filter[]{filter};
}

传参

基本类型的传参

@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(@RequestParam("name") String name, @RequestParam("sex") String
                          sex){
    System.out.println(name);
    System.out.println(sex);
    return name;
}

pojo对象的传参

@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println(user);
    return user.toString();
}
//直接在请求路径后面添加pojo的属性,springmvc自动封装成对象

嵌套pojo对象的传参

日期类型

响应

很简单,不赘述

Rest风格

SSM整合

SpringConfig.java

@Configuration
@ComponentScan("com.cwnu.service")
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
public class SpringConfig {
}

Spring整合Mybatis

JdbcConfig.java

public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

MybatisConfig.java

public class MybatisConfig {

    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setTypeAliasesPackage("com.cwnu.domain");
        sqlSessionFactoryBean.setDataSource(dataSource);
        return sqlSessionFactoryBean;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.cwnu.dao");
        return mapperScannerConfigurer;
    }
}

Spring整合SpringMvc

ServletConfig.java

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

SpringMvcConfig.java

@Configuration
@ComponentScan("com.cwnu.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
posted @ 2024-11-24 18:24  来杯whiskey  阅读(36)  评论(0编辑  收藏  举报