Spring学习笔记

目录

介绍

优点

体系结构 

核心技术

控制反转(IoC)

面向切面编程(AOP)

配置spring核心文件

1.创建一个数据源配置文件

2.创建一个MyBatis SQL Session配置文件

3.创建一个MyBatis配置文件

4.配置Spring

5.使用数据库操作


介绍

Spring框架是一个轻量级的企业级应用框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益

优点

Spring框架的优点有以下几点:

1.低侵入式设计

2.独立于各种应用服务器

3.依赖注入特性将组件关系透明化,降低耦合度

4.面向切面编程特性允许将通用任务进行集中式处理

5.与第三方框架的良好整合

体系结构 

 核心技术

Spring的核心技术有两个分别是控制反转(IoC)和面向切面编程(AOP)

控制反转(IoC)

Spring IOC(Inversion of Control)是一个设计模式,也称为依赖注入(DI)。它是Spring框架的核心,用于管理bean(Java对象)的创建和依赖关系。在Spring IOC中,对象的创建和组装由Spring容器负责而不是由开发人员手动进行。Spring IOC容器维护着一个bean工厂,它创建并管理所有的bean,以及它们的依赖关系。使用Spring IOC可以实现代码的松耦合,提高应用程序的可维护性和可扩展性。

所需的相关依赖:

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
</dependency>

以下是一个简单的实现Spring IOC容器的示例代码:

定义一个接口:

public interface MessageService {
    String getMessage();
}

实现接口:

public class MessageServiceImpl implements MessageService {

    @Override
    public String getMessage() {
        return "Hello, World!";
    }
}

定义配置类:

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {

    @Bean
    public MessageService messageService() {
        return new MessageServiceImpl();
    }

}

创建ApplicationContext:

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        MessageService messageService = context.getBean(MessageService.class);
        System.out.println(messageService.getMessage());
    }
}

输出结果:

Hello, World!
面向切面编程(AOP)

Spring AOP(Aspect-Oriented Programming)是Spring框架的一个重要模块,它提供了一种面向切面编程的方法,用于在不破坏原有代码结构的情况下,将横切关注点(如日志记录、性能统计、安全控制、事务处理等)从业务逻辑中分离出来。

在Spring中,AOP通过定义切面(Aspect)来实现横切关注点的功能,切面定义了哪些方法在什么时候和哪些对象上执行。在Spring AOP中,切面可以通过XML配置文件、注解或者Java代码方式进行定义。

Spring AOP采用的是动态代理技术,在运行时动态地为目标对象创建代理对象,代理对象就可以截获目标对象的方法调用,并在调用前、调用后、异常抛出时等不同的时间点执行相应的切面代码。

下面是一个简单的Spring AOP示例,用于在方法执行前和执行后记录日志:

1.创建一个接口

public interface Calculator {
    int add(int a, int b);
}

2.创建一个实现接口的类

public class CalculatorImpl implements Calculator {
    @Override
    public int add(int a, int b) {
        return a + b;
    }
}

3.创建一个切面

@Component
@Aspect
public class LoggingAspect {

    @Before("execution(public int Calculator.add(int, int))")
    public void before(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();

        System.out.println("Calling method " + methodName + " with args " + Arrays.toString(args));
    }

    @AfterReturning(pointcut = "execution(public int Calculator.add(int, int))", returning = "result")
    public void afterReturning(JoinPoint joinPoint, Object result) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("Method " + methodName + " returned " + result);
    }

}

4.配置Spring AOP

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {

    @Bean
    public Calculator calculator() {
        return new CalculatorImpl();
    }

    @Bean
    public LoggingAspect loggingAspect() {
        return new LoggingAspect();
    }

}

5.使用Spring AOP

public static void main(String[] args) {
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

    Calculator calculator = context.getBean(Calculator.class);

    int result = calculator.add(2, 3);

    System.out.println("Result: " + result);
}

这个示例展示了如何使用Spring AOP记录日志,需要注意的是,要使用AspectJ注释,在@Configuration类上启用@EnableAspectJAutoProxy,并将切面注入Spring上下文。

配置spring核心文件

1.创建一个数据源配置文件

<!-- 数据源配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
    <property name="username" value="root" />
    <property name="password" value="password" />
</bean>

2.创建一个MyBatis SQL Session配置文件

<!-- MyBatis SQL Session 配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

3.创建一个MyBatis配置文件

<!-- MyBatis配置文件 mybatis-config.xml -->
<configuration>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml" />
    </mappers>
</configuration>

4.配置Spring

<!-- 配置Spring -->
<context:annotation-config />
<context:component-scan base-package="com.example.*" />

<import resource="classpath:datasource-config.xml" />
<import resource="classpath:mybatis-sqlsession-config.xml" />

5.使用数据库操作

@Repository
public class UserDaoImpl implements UserDao {

    private SqlSession sqlSession;

    @Autowired
    public UserDaoImpl(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public User getUserById(int id) {
        return sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", id);
    }
}

这个示例展示了如何使用Spring配置文件配置数据源和MyBatis SQL Session以及如何使用自动装配将SQL Session注入DAO实现类中,需要注意的是,要在Spring配置文件中导入数据源配置文件和MyBatis SQL Session配置文件。

总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值