spring注解开发定义bean学习

一、@Component定义bean:

@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }
}

在实现类上面加上@Component("bookDao")代表定义bean,并给他起名叫bookDao

<bean id="bookDao" class="net.lzzy.dao.Impl.BookDaoImpl"/>

想要使用注解开发需要在spring配置文件添加扫描配置: base-package指定扫描@Component的位置,base-package="net.lzzy"表示扫描当前包下的使用子包

 <context:component-scan base-package="net.lzzy"/>

Spring提供@Component注解的三个衍生注解:功能一样,使用原因:方便理解

1、@Controller :用于表现层bean定义

2、@Service :用于业务层bean定义

3、@Repository :用于数据层bean定义

二、纯注解开发

1、新建一个SpringConfig配置类

//声明当前类为Spring配置类
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式
@ComponentScan({"net.lzzy.service","net.lzzy.dao"})
public class SpringConfig {
}

2、@Configuration声明当前类为Spring配置类,代替了spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">

</beans>

3、@ComponentScan({"net.lzzy.service","net.lzzy.dao"})代替了

 <context:component-scan base-package="net.lzzy"/>

4、应用程序

    public static void main(String[] args) {
        //AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        System.out.println(bookDao);
        //按类型获取bean
        BookService bookService = ctx.getBean(BookService.class);
        System.out.println(bookService);
    }

AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器相当于

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

@Configuration注解用于设定当前类为配置类
@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

三、依赖注入:自动装配

1.复杂类型

使用@Autowired注解开启自动装配模式(按类型)无需提供set方法

如果有多个Bean就使用@Qualifier来指定使用的Bean

@Qualifier("bookDao")自动装配指定的类型名称,但是必须需要配合  @Autowired使用

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    @Autowired
    @Qualifier("bookDao")
    private BookDao bookDao;

    public void save() {
        System.out.println("book dao save ..." + name);
    }
}

2.简单类型

使用@Value实现简单类型注入(值类型)

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    //@Value:注入简单类型(无需提供set方法)
    @Value("${name}")
    private String name;

    public void save() {
        System.out.println("book dao save ..." + name);
    }
}

若想使用@Value("${name}")需要在配置类里面加上:@PropertySource({"jdbc.properties"})

@Configuration
@ComponentScan("net.lzzy")
//@PropertySource加载properties配置文件
@PropertySource({"jdbc.properties"})
public class SpringConfig {
}

四、第三方的bean管理

spring配置类@Import({JdbcConfig.class})引入配置

@Configuration
//@Import:导入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}

使用@Bean定义配置

public class JdbcConfig {
    //1.定义一个方法获得要管理的对象
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/spring_db")
    private String url;
    @Value("root")
    private String userName;
    @Value("root")
    private String password;
    //2.添加@Bean,表示当前方法的返回值是一个bean
    //@Bean修饰的方法,形参根据类型自动装配
    @Bean
    public DataSource dataSource(BookDao bookDao){
        System.out.println(bookDao);
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值