Spring 的纯注解配置

知道每个注解的意思:

|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 注解 | 说明 |
| @Configuration | 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解,作用等价于applicationContext.xml 配置文件。 |
| @ComponentScan | 用于指定 Spring在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package="com.sy"/>一样 |
| @Bean | 使用在方法上,标注将该方法的返回值存储到 Spring容器中。 id的值默认是方法的明名称,可以自定义id的值 |
| @PropertySource | 用于加载xxx.properties 文件中的配置结合 @Value("${}") 取配置文件的值。作用类似于:<context:property-placeholder location="classpath:db.properties"></context:property-placeholder> |
| @Import | 用于导入其他配置类 |

定义一个配置类:SpringConfig

java 复制代码
/*普通类变成配置类 需要在类上添加@Configuration*/

/*配置类注解*/ /*这个类是配置类*/
@Configuration
/*包扫描注解   <context:component-scan base-package="com.study"></context:component-scan>*/
@ComponentScan(basePackages = "com.study")
/*导入其他配置类*/
@Import(DataSourceConfig.class)
public class SpringConfig {
}

数据库连接信息配置类:DataSourceConfig

java 复制代码
/*
* 数据库连接信息配置类
* */
//加载配置文件
@PropertySource("classpath:db.properties")
public class DataSourceConfig {

    /*
    *   <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>*/
    @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() throws Exception {
        /*创建数据库连接池*/
        ComboPooledDataSource source = new ComboPooledDataSource();
        /*把文件赋予变量的值  赋到连接池的属性中*/
        source.setDriverClass(driver);
        source.setJdbcUrl(url);
        source.setUser(username);
        source.setPassword(password);
        return source;
    }

    /*
    *           <!--配置jdbcTemplate模板对象-->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--将数据源交给jdbcTemplate模板对象-->
            <property name="dataSource" ref="dataSource"></property>
        </bean>*/
    @Bean
    public JdbcTemplate jdbcTemplate(@Autowired @Qualifier("dataSource") DataSource dataSource){
        /*它是一个数据访问抽象层,为使用JDBC进行数据库操作提供了便利*/
        return new JdbcTemplate(dataSource);
    }
}

持久层:

java 复制代码
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /*
    *查询全部账户信息
    * */
    @Override
    public List<Account> findAllAccounts() {
        String sql="select * from account";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<Account>(Account.class));
    }
}
业务层:
java 复制代码
@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountDao accountDao;

    @Override
    public List<Account> findAllAccounts() {
        return accountDao.findAllAccounts();
    }
}

方法测试可以用spring 和junit整合:

java 复制代码
/*将 Spring 和 Junit 链接了起来*/
@RunWith(SpringJUnit4ClassRunner.class)
/*配置类*/
@ContextConfiguration(classes = SpringConfig.class)
public class AccountController {
    /*实例化对象*/
    @Autowired
    private AccountService accountService;

    @Test
    public void findAllAccountsTests(){
        List<Account> accounts = accountService.findAllAccounts();
        for (Account account : accounts) {
            System.out.println(account);
        }
    }
}
相关推荐
葫芦和十三2 分钟前
图解 MongoDB 06|模式演进:无 schema 是优势还是债
后端·mongodb·agent
葫芦和十三8 小时前
图解 MongoDB 05|文档模型设计:内嵌 vs 引用,反范式不是免费午餐
后端·mongodb·agent
不能放弃治疗11 小时前
单 Agent 实现模式
后端
IT_陈寒13 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
小bo波14 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
fliter14 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
fliter15 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪15 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter15 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶16 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端