Spring的注解开发

一、原始注解

UserDaoImpl类

复制代码
package com.Itheima.Dao.impl;

import com.Itheima.Dao.UserDao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;


//   <bean id="userDao" class="com.Itheima.Dao.impl.userDaoImpl">   </bean>
@Repository("userDao")
public class UserDaoImpl implements UserDao {

//    private dateSource

    @Override
    public void save() {
        System.out.println(" save running.... ");
    }
    
}

ServiceImpl类

复制代码
package com.Itheima.Service.Impl;

import com.Itheima.Dao.UserDao;
import com.Itheima.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

//  <bean id="userService" class="com.Itheima.Service.Impl.userServiceImpl">
//        <property name="userDao" ref="userDao"></property>
//    </bean>

@Service("userService")
@Scope("singleton")
public class UserServiceImpl implements UserService {

//    @Autowired  //按照数据类型从spring容器中进行匹配的
//    @Qualifier("userDao")//按照id的值从容器中进行匹配 此处我们的qualifier注解要结合autowired一起使用
    @Resource(name="userDao")//相当于Qulifier+autowired
    private UserDao userDao;

//如果使用的是xml配置的方式  set方法需要写  如果使用的是注解开发 set方法可以不写
//    public void setUserDao(UserDao userDao) {
//        this.userDao = userDao;
//    }

    @Override
    public void save() {
        userDao.save();
    }

    @PostConstruct
    public void init(){
        System.out.println("Service对象的初始化方法 " + userDao);
    }

    @PreDestroy
    public void destory(){
        System.out.println(" Service对象的销毁方法 ");
    }
}

UserController类

复制代码
package com.Itheima.web;

import com.Itheima.Service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    public static void main(String[] args) {
//        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserService userService =(UserService) app.getBean("userService");
//        userService.save();
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService =(UserService) app.getBean("userService");
        userService.save();
        app.close();
    }
}

applicationContext.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd">
    <import resource="classpath:spring-mvc.xml"/>
<!--    配置组件扫描-->
    <context:component-scan base-package="com.Itheima"/>



<!--    加载外部的properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 在这里配置bean -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}"></property>
    <property name="url" value="${jdbc.url}"></property>
    <property name="username" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

<!--    <bean id="userDao" class="com.Itheima.Dao.impl.userDaoImpl">   </bean>-->

<!--    <bean id="userService" class="com.Itheima.Service.Impl.userServiceImpl">-->
<!--        <property name="userDao" ref="userDao"></property>-->
<!--    </bean>-->
</beans>

二、 新注解

SpringConfigurtion 主配置文件类

复制代码
package com.Itheima.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;

import javax.sql.DataSource;


//该注解表示这个类是Spring的核心配置文件类
@Configuration

//<context:component-scan base-package="com.Itheima"/>
@ComponentScan("com.Itheima")

//<import resource="classpath:spring-mvc.xml"/>加载分的配置文件
@Import({DataSourceConfiguration.class,XXX.class})//本质是一个数组

public class SpringConfigurtion{
   

}

DataSourceConfiguration类 数据源相关的配置类

复制代码
package com.Itheima.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

//相当于 <!--    加载外部的properties文件-->
//    <context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")

public class DataSourceConfiguration {

    @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("dataSource")//spring会将当前方法的返回值以指定名称存储到spring容器当中
    public DataSource getDataSource()throws Exception{
        ComboPooledDataSource ds = new ComboPooledDataSource();
        ds.setDriverClass(driver);
        ds.setJdbcUrl(url);
        ds.setUser(username);
        ds.setPassword(password);
        return ds;
    }
}

package com.Itheima.web;

import com.Itheima.Service.UserService;
import com.Itheima.config.SpringConfigurtion;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    public static void main(String[] args) {
        
        ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfigurtion.class);
        UserService userService =(UserService) app.getBean("userService");
        userService.save();

    }
}
相关推荐
shehuiyuelaiyuehao2 小时前
1计算机是如何工作的
java·计算机网络
陈随易2 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
letisgo52 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周2 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8443 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
暮雨哀尘3 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言
wing983 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
想要入门的程序猿3 小时前
回调函数学习
java·网络·学习
EatFan3 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
泡海椒3 小时前
动态代理核心原理:JQuick-Java接口规则自动生成机制解析
java·开发语言·python